From c049bbe2023e1360be70a6bf4235a65cba4a2030 Mon Sep 17 00:00:00 2001 From: imjching Date: Tue, 3 Jul 2018 19:31:37 -0400 Subject: [PATCH] Bug 1416066 - Add a new flag to nsIAboutModule to load URIs in privileged content processes if feature is enabled. r=mconley We will apply the URI_CAN_LOAD_IN_PRIVILEGED_CHILD flag to Activity Stream about: pages instead of hardcoding the URLs in a Set. MozReview-Commit-ID: F6AGmsKs1SR --- browser/components/about/AboutRedirector.cpp | 2 ++ netwerk/protocol/about/nsIAboutModule.idl | 15 +++++++++++---- toolkit/modules/E10SUtils.jsm | 7 ++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index 971f63f52b4e6..27bc4fc646ecb 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -28,6 +28,7 @@ static const uint32_t ACTIVITY_STREAM_FLAGS = nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::ENABLE_INDEXED_DB | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | + nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGED_CHILD | nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT; struct RedirEntry { @@ -92,6 +93,7 @@ static const RedirEntry kRedirMap[] = { { "newtab", "about:blank", ACTIVITY_STREAM_FLAGS }, { "welcome", "about:blank", nsIAboutModule::URI_MUST_LOAD_IN_CHILD | + nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGED_CHILD | nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::ALLOW_SCRIPT }, { "library", "chrome://browser/content/aboutLibrary.xhtml", diff --git a/netwerk/protocol/about/nsIAboutModule.idl b/netwerk/protocol/about/nsIAboutModule.idl index 230cd6c0569bb..08e8d74dcfd6d 100644 --- a/netwerk/protocol/about/nsIAboutModule.idl +++ b/netwerk/protocol/about/nsIAboutModule.idl @@ -10,11 +10,11 @@ interface nsIChannel; interface nsILoadInfo; [scriptable, uuid(c0c19db9-1b5a-4ac5-b656-ed6f8149fa48)] -interface nsIAboutModule : nsISupports +interface nsIAboutModule : nsISupports { /** - * Constructs a new channel for the about protocol module. + * Constructs a new channel for the about protocol module. * * @param aURI the uri of the new channel * @param aLoadInfo the loadinfo of the new channel @@ -71,6 +71,13 @@ interface nsIAboutModule : nsISupports */ const unsigned long MAKE_LINKABLE = (1 << 7); + /** + * A flag that indicates that this URI can be loaded in the privileged + * content process if privileged content process is enabled. Ignored unless + * URI_MUST_LOAD_IN_CHILD is also specified. + */ + const unsigned long URI_CAN_LOAD_IN_PRIVILEGED_CHILD = (1 << 8); + /** * A method to get the flags that apply to a given about: URI. The URI * passed in is guaranteed to be one of the URIs that this module @@ -81,8 +88,8 @@ interface nsIAboutModule : nsISupports %{C++ -#define NS_ABOUT_MODULE_CONTRACTID "@mozilla.org/network/protocol/about;1" -#define NS_ABOUT_MODULE_CONTRACTID_PREFIX NS_ABOUT_MODULE_CONTRACTID "?what=" +#define NS_ABOUT_MODULE_CONTRACTID "@mozilla.org/network/protocol/about;1" +#define NS_ABOUT_MODULE_CONTRACTID_PREFIX NS_ABOUT_MODULE_CONTRACTID "?what=" #define NS_ABOUT_MODULE_CONTRACTID_LENGTH 49 // strlen(NS_ABOUT_MODULE_CONTRACTID_PREFIX) %} diff --git a/toolkit/modules/E10SUtils.jsm b/toolkit/modules/E10SUtils.jsm index 5598367b6d8c5..16842cbe53786 100644 --- a/toolkit/modules/E10SUtils.jsm +++ b/toolkit/modules/E10SUtils.jsm @@ -43,8 +43,6 @@ const PRIVILEGED_REMOTE_TYPE = "privileged"; const LARGE_ALLOCATION_REMOTE_TYPE = "webLargeAllocation"; const DEFAULT_REMOTE_TYPE = WEB_REMOTE_TYPE; -const ACTIVITY_STREAM_PAGES = new Set(["home", "newtab", "welcome"]); - function validatedWebRemoteType(aPreferredRemoteType, aTargetUri, aCurrentUri) { // If the domain is whitelisted to allow it to use file:// URIs, then we have // to run it in a file content process, in case it uses file:// sub-resources. @@ -159,9 +157,8 @@ var E10SUtils = { let flags = module.getURIFlags(aURI); if (flags & Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD) { - // Load Activity Stream in a separate process. - if (useSeparatePrivilegedContentProcess && - ACTIVITY_STREAM_PAGES.has(aURI.filePath)) { + if ((flags & Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGED_CHILD) && + useSeparatePrivilegedContentProcess) { return PRIVILEGED_REMOTE_TYPE; } return DEFAULT_REMOTE_TYPE;