Bug 1268285 - E10SUtils shouldn't throw when passed invalid chrome: URIs, r?felipe draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Wed, 11 May 2016 10:42:21 +0100
changeset 365707 8ce188454bdbd0b019f27aec8c70ab4a49875a73
parent 365705 7cd8232b72924c0770b65e1ea6d8c9d977710713
child 520635 efd7b6ddaa5150ff1d598612060d54aa703c8ba1
push id17828
push usergijskruitbosch@gmail.com
push dateWed, 11 May 2016 10:10:12 +0000
reviewersfelipe
bugs1268285
milestone49.0a1
Bug 1268285 - E10SUtils shouldn't throw when passed invalid chrome: URIs, r?felipe MozReview-Commit-ID: CYof4pGFHIk
browser/modules/E10SUtils.jsm
--- a/browser/modules/E10SUtils.jsm
+++ b/browser/modules/E10SUtils.jsm
@@ -47,21 +47,31 @@ this.E10SUtils = {
       if (module) {
         let flags = module.getURIFlags(url);
         canLoadRemote = !!(flags & Ci.nsIAboutModule.URI_CAN_LOAD_IN_CHILD);
         mustLoadRemote = !!(flags & Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD);
       }
     }
 
     if (aURL.startsWith("chrome:")) {
-      let url = Services.io.newURI(aURL, null, null);
-      let chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"].
-                      getService(Ci.nsIXULChromeRegistry);
-      canLoadRemote = chromeReg.canLoadURLRemotely(url);
-      mustLoadRemote = chromeReg.mustLoadURLRemotely(url);
+      let url;
+      try {
+        // This can fail for invalid Chrome URIs, in which case we will end up
+        // not loading anything anyway.
+        url = Services.io.newURI(aURL, null, null);
+      } catch (ex) {
+        canLoadRemote = true;
+        mustLoadRemote = false;
+      }
+      if (url) {
+        let chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"].
+                        getService(Ci.nsIXULChromeRegistry);
+        canLoadRemote = chromeReg.canLoadURLRemotely(url);
+        mustLoadRemote = chromeReg.mustLoadURLRemotely(url);
+      }
     }
 
     if (aURL.startsWith("moz-extension:")) {
       canLoadRemote = false;
       mustLoadRemote = false;
     }
 
     if (aURL.startsWith("view-source:")) {