Bug 1317101 - Part 1: Allow about:addons to load remote <browser>s into its content docshell. r?billm draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 12 Nov 2016 15:33:07 -0800
changeset 438067 0311ad723ffb79dd4ce11c0e3481484caae28169
parent 438027 67858d51f777ad68685a7d0cca0355229fe17716
child 438068 f1f19cac2a76917bf8fe2b2efd0a68ca60855d34
push id35614
push usermaglione.k@gmail.com
push dateSun, 13 Nov 2016 03:28:59 +0000
reviewersbillm
bugs1317101
milestone52.0a1
Bug 1317101 - Part 1: Allow about:addons to load remote <browser>s into its content docshell. r?billm MozReview-Commit-ID: Kv0LDFR2SEq
dom/base/nsFrameLoader.cpp
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -2666,17 +2666,28 @@ nsFrameLoader::TryRemoteBrowser()
       openingTab->Manager() &&
       openingTab->Manager()->IsContentParent()) {
     openerContentParent = openingTab->Manager()->AsContentParent();
   }
 
   // <iframe mozbrowser> gets to skip these checks.
   if (!OwnerIsMozBrowserOrAppFrame()) {
     if (parentDocShell->ItemType() != nsIDocShellTreeItem::typeChrome) {
-      return false;
+      // Allow about:addon an exception to this rule so it can load remote
+      // extension options pages.
+      nsCOMPtr<nsIWebNavigation> parentWebNav;
+      nsCOMPtr<nsIURI> aboutAddons;
+      nsCOMPtr<nsIURI> parentURI;
+      bool equals;
+      if (!((parentWebNav = do_GetInterface(parentDocShell)) &&
+            NS_SUCCEEDED(NS_NewURI(getter_AddRefs(aboutAddons), "about:addons")) &&
+            NS_SUCCEEDED(parentWebNav->GetCurrentURI(getter_AddRefs(parentURI))) &&
+            NS_SUCCEEDED(parentURI->EqualsExceptRef(aboutAddons, &equals)) && equals)) {
+        return false;
+      }
     }
 
     if (!mOwnerContent->IsXULElement()) {
       return false;
     }
 
     nsAutoString value;
     mOwnerContent->GetAttr(kNameSpaceID_None, nsGkAtoms::type, value);