Skip to content

Commit 77ec5a1

Browse files
Bug 1179250 - Make implementation of GetInterface return NS_ERROR_NO_INTERFACE on error.r=valentin
Differential Revision: https://phabricator.services.mozilla.com/D68607 --HG-- extra : moz-landing-system : lando
1 parent b204bf5 commit 77ec5a1

File tree

6 files changed

+38
-15
lines changed

6 files changed

+38
-15
lines changed

netwerk/base/nsPACMan.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -850,8 +850,13 @@ nsPACMan::GetInterface(const nsIID& iid, void** result) {
850850
if (iid.Equals(NS_GET_IID(nsIAuthPrompt))) {
851851
nsCOMPtr<nsIPromptFactory> promptFac =
852852
do_GetService("@mozilla.org/prompter;1");
853-
NS_ENSURE_TRUE(promptFac, NS_ERROR_FAILURE);
854-
return promptFac->GetPrompt(nullptr, iid, reinterpret_cast<void**>(result));
853+
NS_ENSURE_TRUE(promptFac, NS_ERROR_NO_INTERFACE);
854+
nsresult rv =
855+
promptFac->GetPrompt(nullptr, iid, reinterpret_cast<void**>(result));
856+
if (NS_FAILED(rv)) {
857+
return NS_ERROR_NO_INTERFACE;
858+
}
859+
return NS_OK;
855860
}
856861

857862
// In case loading the PAC file results in a redirect.

netwerk/protocol/ftp/FTPChannelParent.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,12 @@ FTPChannelParent::GetInterface(const nsIID& uuid, void** result) {
550550
uuid.Equals(NS_GET_IID(nsIAuthPrompt2))) {
551551
nsCOMPtr<nsIAuthPromptProvider> provider(do_QueryObject(mBrowserParent));
552552
if (provider) {
553-
return provider->GetAuthPrompt(nsIAuthPromptProvider::PROMPT_NORMAL, uuid,
554-
result);
553+
nsresult rv = provider->GetAuthPrompt(
554+
nsIAuthPromptProvider::PROMPT_NORMAL, uuid, result);
555+
if (NS_FAILED(rv)) {
556+
return NS_ERROR_NO_INTERFACE;
557+
}
558+
return NS_OK;
555559
}
556560
}
557561

netwerk/protocol/http/HttpChannelParent.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,19 +309,23 @@ HttpChannelParent::GetInterface(const nsIID& aIID, void** result) {
309309
nsresult rv;
310310
nsCOMPtr<nsIWindowWatcher> wwatch =
311311
do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
312-
NS_ENSURE_SUCCESS(rv, rv);
312+
NS_ENSURE_SUCCESS(rv, NS_ERROR_NO_INTERFACE);
313313

314314
bool hasWindowCreator = false;
315315
Unused << wwatch->HasWindowCreator(&hasWindowCreator);
316316
if (!hasWindowCreator) {
317-
return NS_ERROR_FAILURE;
317+
return NS_ERROR_NO_INTERFACE;
318318
}
319319

320320
nsCOMPtr<nsIPromptFactory> factory = do_QueryInterface(wwatch);
321321
if (!factory) {
322322
return NS_ERROR_NO_INTERFACE;
323323
}
324-
return factory->GetPrompt(nullptr, aIID, reinterpret_cast<void**>(result));
324+
rv = factory->GetPrompt(nullptr, aIID, reinterpret_cast<void**>(result));
325+
if (NS_FAILED(rv)) {
326+
return NS_ERROR_NO_INTERFACE;
327+
}
328+
return NS_OK;
325329
}
326330

327331
// Only support nsILoadContext if child channel's callbacks did too

netwerk/protocol/http/ParentChannelListener.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,20 +166,20 @@ ParentChannelListener::GetInterface(const nsIID& aIID, void** result) {
166166
mBrowsingContext->Top()->GetEmbedderElement();
167167
if (frameElement) {
168168
nsCOMPtr<nsPIDOMWindowOuter> win = frameElement->OwnerDoc()->GetWindow();
169-
NS_ENSURE_TRUE(win, NS_ERROR_UNEXPECTED);
169+
NS_ENSURE_TRUE(win, NS_ERROR_NO_INTERFACE);
170170

171171
nsresult rv;
172172
nsCOMPtr<nsIWindowWatcher> wwatch =
173173
do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
174174

175175
if (NS_WARN_IF(!NS_SUCCEEDED(rv))) {
176-
return rv;
176+
return NS_ERROR_NO_INTERFACE;
177177
}
178178

179179
nsCOMPtr<nsIPrompt> prompt;
180180
rv = wwatch->GetNewPrompter(win, getter_AddRefs(prompt));
181181
if (NS_WARN_IF(!NS_SUCCEEDED(rv))) {
182-
return rv;
182+
return NS_ERROR_NO_INTERFACE;
183183
}
184184

185185
prompt.forget(result);
@@ -189,7 +189,12 @@ ParentChannelListener::GetInterface(const nsIID& aIID, void** result) {
189189

190190
if (mBrowsingContext && (aIID.Equals(NS_GET_IID(nsIAuthPrompt)) ||
191191
aIID.Equals(NS_GET_IID(nsIAuthPrompt2)))) {
192-
return GetAuthPrompt(nsIAuthPromptProvider::PROMPT_NORMAL, aIID, result);
192+
nsresult rv =
193+
GetAuthPrompt(nsIAuthPromptProvider::PROMPT_NORMAL, aIID, result);
194+
if (NS_FAILED(rv)) {
195+
return NS_ERROR_NO_INTERFACE;
196+
}
197+
return NS_OK;
193198
}
194199

195200
nsCOMPtr<nsIInterfaceRequestor> ir;

netwerk/protocol/websocket/WebSocketChannel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3031,7 +3031,7 @@ WebSocketChannel::GetInterface(const nsIID& iid, void** result) {
30313031

30323032
if (mCallbacks) return mCallbacks->GetInterface(iid, result);
30333033

3034-
return NS_ERROR_FAILURE;
3034+
return NS_ERROR_NO_INTERFACE;
30353035
}
30363036

30373037
// nsIChannelEventSink

netwerk/protocol/websocket/WebSocketChannelParent.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,14 @@ void WebSocketChannelParent::ActorDestroy(ActorDestroyReason why) {
274274
NS_IMETHODIMP
275275
WebSocketChannelParent::GetInterface(const nsIID& iid, void** result) {
276276
LOG(("WebSocketChannelParent::GetInterface() %p\n", this));
277-
if (mAuthProvider && iid.Equals(NS_GET_IID(nsIAuthPromptProvider)))
278-
return mAuthProvider->GetAuthPrompt(nsIAuthPromptProvider::PROMPT_NORMAL,
279-
iid, result);
277+
if (mAuthProvider && iid.Equals(NS_GET_IID(nsIAuthPromptProvider))) {
278+
nsresult rv = mAuthProvider->GetAuthPrompt(
279+
nsIAuthPromptProvider::PROMPT_NORMAL, iid, result);
280+
if (NS_FAILED(rv)) {
281+
return NS_ERROR_NO_INTERFACE;
282+
}
283+
return NS_OK;
284+
}
280285

281286
// Only support nsILoadContext if child channel's callbacks did too
282287
if (iid.Equals(NS_GET_IID(nsILoadContext)) && mLoadContext) {

0 commit comments

Comments
 (0)