Bug 1317101 - Part 1: Allow about:addons to load remote <browser>s into its content docshell. r?billm
MozReview-Commit-ID: Kv0LDFR2SEq
--- 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);