Bug 1087442 - Attach LoadInfo inside each individual ProtocolHandler - chrome/ changes (r=sicking)
--- a/chrome/nsChromeProtocolHandler.cpp
+++ b/chrome/nsChromeProtocolHandler.cpp
@@ -95,17 +95,17 @@ nsChromeProtocolHandler::NewURI(const ns
surl->SetMutable(false);
NS_ADDREF(*result = url);
return NS_OK;
}
NS_IMETHODIMP
nsChromeProtocolHandler::NewChannel2(nsIURI* aURI,
- nsILoadInfo* aLoadinfo,
+ nsILoadInfo* aLoadInfo,
nsIChannel** aResult)
{
nsresult rv;
NS_ENSURE_ARG_POINTER(aURI);
NS_PRECONDITION(aResult, "Null out param");
#ifdef DEBUG
@@ -142,22 +142,32 @@ nsChromeProtocolHandler::NewChannel2(nsI
#ifdef DEBUG
nsAutoCString spec;
aURI->GetSpec(spec);
printf("Couldn't convert chrome URL: %s\n", spec.get());
#endif
return rv;
}
- nsCOMPtr<nsIIOService> ioServ(do_GetIOService(&rv));
+ // Bug 1087720 (and Bug 1099296):
+ // Once all callsites have been updated to call NewChannel2() instead of NewChannel()
+ // we should have a non-null loadInfo consistently. Until then we have to branch on the
+ // loadInfo.
+ if (aLoadInfo) {
+ rv = NS_NewChannelInternal(getter_AddRefs(result),
+ resolvedURI,
+ aLoadInfo);
+ }
+ else {
+ nsCOMPtr<nsIIOService> ioServ(do_GetIOService(&rv));
+ NS_ENSURE_SUCCESS(rv, rv);
+ rv = ioServ->NewChannelFromURI(resolvedURI, getter_AddRefs(result));
+ }
NS_ENSURE_SUCCESS(rv, rv);
- rv = ioServ->NewChannelFromURI(resolvedURI, getter_AddRefs(result));
- if (NS_FAILED(rv)) return rv;
-
#ifdef DEBUG
nsCOMPtr<nsIFileChannel> fileChan(do_QueryInterface(result));
if (fileChan) {
nsCOMPtr<nsIFile> file;
fileChan->GetFile(getter_AddRefs(file));
bool exists = false;
file->Exists(&exists);