Bug 1087442 - Attach LoadInfo inside each individual ProtocolHandler - chrome/ changes (r=sicking)
authorChristoph Kerschbaumer <mozilla@christophkerschbaumer.com>
Fri, 12 Dec 2014 09:05:34 -0800
changeset 219429 9cc6292a427c5d5b316a9f951c3918acd3ddc6fb
parent 219428 9f78c3062ad90792edf0ef94febce7c8906d88c6
child 219430 c436f9b93cc9d4881a66c1f6c61190fe3611e827
push id52830
push usermozilla@christophkerschbaumer.com
push dateFri, 12 Dec 2014 17:20:37 +0000
treeherdermozilla-inbound@2e0a0c0d7685 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssicking
bugs1087442
milestone37.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1087442 - Attach LoadInfo inside each individual ProtocolHandler - chrome/ changes (r=sicking)
chrome/nsChromeProtocolHandler.cpp
--- 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);