Backed out 9 changesets (bug 1472212) for browser-chrome tests run issues on Linux x64 asan and failures on browser_ext_windows_create_tabId.js. CLOSED TREE

Backed out changeset 18e46df44cd1 (bug 1472212)
Backed out changeset 2e5de66c1f60 (bug 1472212)
Backed out changeset b94f9883aef0 (bug 1472212)
Backed out changeset ebdca743668c (bug 1472212)
Backed out changeset f8a06d01437e (bug 1472212)
Backed out changeset b6996abc7d90 (bug 1472212)
Backed out changeset 24c257cd18c3 (bug 1472212)
Backed out changeset 176f3ee14e67 (bug 1472212)
Backed out changeset b4baa63e5b1b (bug 1472212)
This commit is contained in:
Csoregi Natalia 2018-10-30 01:58:21 +02:00
parent bb30270b1c
commit cc313f779c
20 changed files with 104 additions and 241 deletions

View File

@ -468,11 +468,6 @@ pref("browser.tabs.showAudioPlayingIcon", true);
// This should match Chromium's audio indicator delay. // This should match Chromium's audio indicator delay.
pref("browser.tabs.delayHidingAudioPlayingIconMS", 3000); pref("browser.tabs.delayHidingAudioPlayingIconMS", 3000);
// Pref to control whether we use separate privileged content processes.
#ifdef NIGHTLY_BUILD
pref("browser.tabs.remote.separatePrivilegedContentProcess", true);
#endif
pref("browser.ctrlTab.recentlyUsedOrder", true); pref("browser.ctrlTab.recentlyUsedOrder", true);
// By default, do not export HTML at shutdown. // By default, do not export HTML at shutdown.

View File

@ -710,7 +710,7 @@ window._gBrowser = {
/** /**
* Determine if a URI is an about: page pointing to a local resource. * Determine if a URI is an about: page pointing to a local resource.
*/ */
isLocalAboutURI(aURI, aResolvedURI) { _isLocalAboutURI(aURI, aResolvedURI) {
if (!aURI.schemeIs("about")) { if (!aURI.schemeIs("about")) {
return false; return false;
} }
@ -737,15 +737,6 @@ window._gBrowser = {
} }
}, },
/**
* Sets an icon for the tab if the URI is defined in FAVICON_DEFAULTS.
*/
setDefaultIcon(aTab, aURI) {
if (aURI && aURI.spec in FAVICON_DEFAULTS) {
this.setIcon(aTab, FAVICON_DEFAULTS[aURI.spec]);
}
},
setIcon(aTab, aIconURL = "", aOriginalURL = aIconURL, aLoadingPrincipal = null) { setIcon(aTab, aIconURL = "", aOriginalURL = aIconURL, aLoadingPrincipal = null) {
let makeString = (url) => url instanceof Ci.nsIURI ? url.spec : url; let makeString = (url) => url instanceof Ci.nsIURI ? url.spec : url;
@ -2514,7 +2505,9 @@ window._gBrowser = {
// Hack to ensure that the about:newtab, and about:welcome favicon is loaded // Hack to ensure that the about:newtab, and about:welcome favicon is loaded
// instantaneously, to avoid flickering and improve perceived performance. // instantaneously, to avoid flickering and improve perceived performance.
this.setDefaultIcon(t, aURIObject); if (aURI in FAVICON_DEFAULTS) {
this.setIcon(t, FAVICON_DEFAULTS[aURI]);
}
// Dispatch a new tab notification. We do this once we're // Dispatch a new tab notification. We do this once we're
// entirely done, so that things are in a consistent state // entirely done, so that things are in a consistent state
@ -4823,7 +4816,7 @@ class TabProgressListener {
// Don't show progress indicators in tabs for about: URIs // Don't show progress indicators in tabs for about: URIs
// pointing to local resources. // pointing to local resources.
if ((aRequest instanceof Ci.nsIChannel) && if ((aRequest instanceof Ci.nsIChannel) &&
gBrowser.isLocalAboutURI(aRequest.originalURI, aRequest.URI)) { gBrowser._isLocalAboutURI(aRequest.originalURI, aRequest.URI)) {
return false; return false;
} }

View File

@ -1,6 +1,5 @@
const CHROME_PROCESS = E10SUtils.NOT_REMOTE; const CHROME_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
const WEB_CONTENT_PROCESS = E10SUtils.WEB_REMOTE_TYPE; const CONTENT_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT;
const PRIVILEGED_CONTENT_PROCESS = E10SUtils.PRIVILEGED_REMOTE_TYPE;
const CHROME = { const CHROME = {
id: "cb34538a-d9da-40f3-b61a-069f0b2cb9fb", id: "cb34538a-d9da-40f3-b61a-069f0b2cb9fb",
@ -17,18 +16,11 @@ const MUSTREMOTE = {
path: "test-mustremote", path: "test-mustremote",
flags: Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD, flags: Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD,
}; };
const CANPRIVILEGEDREMOTE = {
id: "a04ffafe-6c63-4266-acae-0f4b093165aa",
path: "test-canprivilegedremote",
flags: Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGED_CHILD,
};
const TEST_MODULES = [ const TEST_MODULES = [
CHROME, CHROME,
CANREMOTE, CANREMOTE,
MUSTREMOTE, MUSTREMOTE,
CANPRIVILEGEDREMOTE,
]; ];
function AboutModule() { function AboutModule() {
@ -87,70 +79,36 @@ registerCleanupFunction(() => {
} }
}); });
function test_url(url, chromeResult, webContentResult, privilegedContentResult) { function test_url(url, chromeResult, contentResult) {
is(E10SUtils.canLoadURIInRemoteType(url, CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url, CHROME_PROCESS),
chromeResult, "Check URL in chrome process."); chromeResult, "Check URL in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url, WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url, CONTENT_PROCESS),
webContentResult, "Check URL in web content process."); contentResult, "Check URL in content process.");
is(E10SUtils.canLoadURIInRemoteType(url, PRIVILEGED_CONTENT_PROCESS),
privilegedContentResult, "Check URL in privileged content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "#foo", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "#foo", CHROME_PROCESS),
chromeResult, "Check URL with ref in chrome process."); chromeResult, "Check URL with ref in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "#foo", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "#foo", CONTENT_PROCESS),
webContentResult, "Check URL with ref in web content process."); contentResult, "Check URL with ref in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "#foo", PRIVILEGED_CONTENT_PROCESS),
privilegedContentResult, "Check URL with ref in privileged content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo", CHROME_PROCESS),
chromeResult, "Check URL with query in chrome process."); chromeResult, "Check URL with query in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo", CONTENT_PROCESS),
webContentResult, "Check URL with query in web content process."); contentResult, "Check URL with query in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo", PRIVILEGED_CONTENT_PROCESS),
privilegedContentResult, "Check URL with query in privileged content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CHROME_PROCESS),
chromeResult, "Check URL with query and ref in chrome process."); chromeResult, "Check URL with query and ref in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CONTENT_PROCESS),
webContentResult, "Check URL with query and ref in web content process."); contentResult, "Check URL with query and ref in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", PRIVILEGED_CONTENT_PROCESS),
privilegedContentResult, "Check URL with query and ref in privileged content process.");
} }
add_task(async function test_chrome() { add_task(async function test_chrome() {
test_url("about:" + CHROME.path, true, false, false); test_url("about:" + CHROME.path, true, false);
}); });
add_task(async function test_any() { add_task(async function test_any() {
test_url("about:" + CANREMOTE.path, true, true, false); test_url("about:" + CANREMOTE.path, true, true);
}); });
add_task(async function test_remote() { add_task(async function test_remote() {
test_url("about:" + MUSTREMOTE.path, false, true, false); test_url("about:" + MUSTREMOTE.path, false, true);
});
add_task(async function test_privileged_remote_true() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.tabs.remote.separatePrivilegedContentProcess", true],
],
});
// This shouldn't be taken literally. We will always use the privileged
// content type if the URI_CAN_LOAD_IN_PRIVILEGED_CHILD flag is enabled and
// the pref is turned on.
test_url("about:" + CANPRIVILEGEDREMOTE.path, false, false, true);
});
add_task(async function test_privileged_remote_false() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.tabs.remote.separatePrivilegedContentProcess", false],
],
});
// This shouldn't be taken literally. We will always use the privileged
// content type if the URI_CAN_LOAD_IN_PRIVILEGED_CHILD flag is enabled and
// the pref is turned on.
test_url("about:" + CANPRIVILEGEDREMOTE.path, false, true, false);
}); });

View File

@ -32,8 +32,8 @@ function makeTest(name, startURL, startProcessIsRemote, endURL, endProcessIsRemo
}; };
} }
const CHROME_PROCESS = E10SUtils.NOT_REMOTE; const CHROME_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
const WEB_CONTENT_PROCESS = E10SUtils.WEB_REMOTE_TYPE; const CONTENT_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT;
const PATH = (getRootDirectory(gTestPath) + "test_process_flags_chrome.html").replace("chrome://mochitests", ""); const PATH = (getRootDirectory(gTestPath) + "test_process_flags_chrome.html").replace("chrome://mochitests", "");
const CHROME = "chrome://mochitests" + PATH; const CHROME = "chrome://mochitests" + PATH;
@ -49,25 +49,25 @@ registerCleanupFunction(() => {
}); });
function test_url(url, chromeResult, contentResult) { function test_url(url, chromeResult, contentResult) {
is(E10SUtils.canLoadURIInRemoteType(url, CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url, CHROME_PROCESS),
chromeResult, "Check URL in chrome process."); chromeResult, "Check URL in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url, WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url, CONTENT_PROCESS),
contentResult, "Check URL in web content process."); contentResult, "Check URL in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "#foo", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "#foo", CHROME_PROCESS),
chromeResult, "Check URL with ref in chrome process."); chromeResult, "Check URL with ref in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "#foo", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "#foo", CONTENT_PROCESS),
contentResult, "Check URL with ref in web content process."); contentResult, "Check URL with ref in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo", CHROME_PROCESS),
chromeResult, "Check URL with query in chrome process."); chromeResult, "Check URL with query in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo", CONTENT_PROCESS),
contentResult, "Check URL with query in web content process."); contentResult, "Check URL with query in content process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", CHROME_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CHROME_PROCESS),
chromeResult, "Check URL with query and ref in chrome process."); chromeResult, "Check URL with query and ref in chrome process.");
is(E10SUtils.canLoadURIInRemoteType(url + "?foo#bar", WEB_CONTENT_PROCESS), is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CONTENT_PROCESS),
contentResult, "Check URL with query and ref in web content process."); contentResult, "Check URL with query and ref in content process.");
} }
add_task(async function test_chrome() { add_task(async function test_chrome() {

View File

@ -1,11 +1,11 @@
const CHROME_PROCESS = E10SUtils.NOT_REMOTE; const CHROME_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
const WEB_CONTENT_PROCESS = E10SUtils.WEB_REMOTE_TYPE; const CONTENT_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT;
add_task(async function() { add_task(async function() {
let url = "javascript:dosomething()"; let url = "javascript:dosomething()";
ok(E10SUtils.canLoadURIInRemoteType(url, CHROME_PROCESS), ok(E10SUtils.canLoadURIInProcess(url, CHROME_PROCESS),
"Check URL in chrome process."); "Check URL in chrome process.");
ok(E10SUtils.canLoadURIInRemoteType(url, WEB_CONTENT_PROCESS), ok(E10SUtils.canLoadURIInProcess(url, CONTENT_PROCESS),
"Check URL in web content process."); "Check URL in content process.");
}); });

View File

@ -4,7 +4,7 @@
"use strict"; "use strict";
/** /**
* Unit tests for tabbrowser.isLocalAboutURI to make sure it returns the * Unit tests for tabbrowser._isLocalAboutURI to make sure it returns the
* appropriate values for various URIs as well as optional resolved URI. * appropriate values for various URIs as well as optional resolved URI.
*/ */
@ -12,9 +12,9 @@ add_task(function test_URI() {
const check = (spec, expect, description) => { const check = (spec, expect, description) => {
const URI = Services.io.newURI(spec); const URI = Services.io.newURI(spec);
try { try {
is(gBrowser.isLocalAboutURI(URI), expect, description); is(gBrowser._isLocalAboutURI(URI), expect, description);
} catch (ex) { } catch (ex) {
ok(false, "isLocalAboutURI should not throw"); ok(false, "_isLocalAboutURI should not throw");
} }
}; };
check("https://www.mozilla.org/", false, "https is not about"); check("https://www.mozilla.org/", false, "https is not about");
@ -30,7 +30,7 @@ add_task(function test_URI_with_resolved() {
const check = (spec, resolvedSpec, expect, description) => { const check = (spec, resolvedSpec, expect, description) => {
const URI = Services.io.newURI(spec); const URI = Services.io.newURI(spec);
const resolvedURI = Services.io.newURI(resolvedSpec); const resolvedURI = Services.io.newURI(resolvedSpec);
is(gBrowser.isLocalAboutURI(URI, resolvedURI), expect, description); is(gBrowser._isLocalAboutURI(URI, resolvedURI), expect, description);
}; };
check("about:newtab", check("about:newtab",
"jar:file:///Applications/Firefox.app/Contents/Resources/browser/omni.ja!/chrome/browser/res/activity-stream/prerendered/en-US/activity-stream.html", "jar:file:///Applications/Firefox.app/Contents/Resources/browser/omni.ja!/chrome/browser/res/activity-stream/prerendered/en-US/activity-stream.html",

View File

@ -30,7 +30,7 @@ const TEST_HTTP = "http://example.org/";
* do not match. If not present, it uses the default message defined * do not match. If not present, it uses the default message defined
* in the function parameters. * in the function parameters.
*/ */
function checkBrowserRemoteType( async function checkBrowserRemoteType(
browser, browser,
expectedRemoteType, expectedRemoteType,
message = `Ensures that tab runs in the ${expectedRemoteType} content process.` message = `Ensures that tab runs in the ${expectedRemoteType} content process.`
@ -63,7 +63,7 @@ add_task(async function activity_stream_in_privileged_content_process() {
Services.ppmm.releaseCachedProcesses(); Services.ppmm.releaseCachedProcesses();
await BrowserTestUtils.withNewTab(ABOUT_NEWTAB, async function(browser1) { await BrowserTestUtils.withNewTab(ABOUT_NEWTAB, async function(browser1) {
checkBrowserRemoteType(browser1, E10SUtils.PRIVILEGED_REMOTE_TYPE); await checkBrowserRemoteType(browser1, E10SUtils.PRIVILEGED_REMOTE_TYPE);
// Note the processID for about:newtab for comparison later. // Note the processID for about:newtab for comparison later.
let privilegedPid = browser1.frameLoader.tabParent.osPid; let privilegedPid = browser1.frameLoader.tabParent.osPid;
@ -97,7 +97,7 @@ add_task(async function process_switching_through_loading_in_the_same_tab() {
Services.ppmm.releaseCachedProcesses(); Services.ppmm.releaseCachedProcesses();
await BrowserTestUtils.withNewTab(TEST_HTTP, async function(browser) { await BrowserTestUtils.withNewTab(TEST_HTTP, async function(browser) {
checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); await checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE);
for (let [url, remoteType] of [ for (let [url, remoteType] of [
[ABOUT_NEWTAB, E10SUtils.PRIVILEGED_REMOTE_TYPE], [ABOUT_NEWTAB, E10SUtils.PRIVILEGED_REMOTE_TYPE],
@ -123,7 +123,7 @@ add_task(async function process_switching_through_loading_in_the_same_tab() {
]) { ]) {
BrowserTestUtils.loadURI(browser, url); BrowserTestUtils.loadURI(browser, url);
await BrowserTestUtils.browserLoaded(browser, false, url); await BrowserTestUtils.browserLoaded(browser, false, url);
checkBrowserRemoteType(browser, remoteType); await checkBrowserRemoteType(browser, remoteType);
} }
}); });
@ -139,7 +139,7 @@ add_task(async function process_switching_through_navigation_features() {
Services.ppmm.releaseCachedProcesses(); Services.ppmm.releaseCachedProcesses();
await BrowserTestUtils.withNewTab(ABOUT_NEWTAB, async function(browser) { await BrowserTestUtils.withNewTab(ABOUT_NEWTAB, async function(browser) {
checkBrowserRemoteType(browser, E10SUtils.PRIVILEGED_REMOTE_TYPE); await checkBrowserRemoteType(browser, E10SUtils.PRIVILEGED_REMOTE_TYPE);
// Note the processID for about:newtab for comparison later. // Note the processID for about:newtab for comparison later.
let privilegedPid = browser.frameLoader.tabParent.osPid; let privilegedPid = browser.frameLoader.tabParent.osPid;
@ -166,7 +166,7 @@ add_task(async function process_switching_through_navigation_features() {
// Load http webpage // Load http webpage
BrowserTestUtils.loadURI(browser, TEST_HTTP); BrowserTestUtils.loadURI(browser, TEST_HTTP);
await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP); await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP);
checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); await checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE);
// Check that using the history back feature switches back to privileged content process. // Check that using the history back feature switches back to privileged content process.
let promiseLocation = BrowserTestUtils.waitForLocationChange(gBrowser, ABOUT_NEWTAB); let promiseLocation = BrowserTestUtils.waitForLocationChange(gBrowser, ABOUT_NEWTAB);
@ -185,7 +185,7 @@ add_task(async function process_switching_through_navigation_features() {
// We will need to ensure that the process flip has fully completed so that // We will need to ensure that the process flip has fully completed so that
// the navigation history data will be available when we do browser.gotoIndex(0); // the navigation history data will be available when we do browser.gotoIndex(0);
await BrowserTestUtils.waitForEvent(newTab, "SSTabRestored"); await BrowserTestUtils.waitForEvent(newTab, "SSTabRestored");
checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE, await checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE,
"Check that tab runs in the web content process after using history goForward."); "Check that tab runs in the web content process after using history goForward.");
// Check that goto history index does not break the affinity. // Check that goto history index does not break the affinity.
@ -197,7 +197,7 @@ add_task(async function process_switching_through_navigation_features() {
BrowserTestUtils.loadURI(browser, TEST_HTTP); BrowserTestUtils.loadURI(browser, TEST_HTTP);
await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP); await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP);
checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); await checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE);
// Check that location change causes a change in process type as well. // Check that location change causes a change in process type as well.
await ContentTask.spawn(browser, ABOUT_NEWTAB, uri => { await ContentTask.spawn(browser, ABOUT_NEWTAB, uri => {

View File

@ -108,7 +108,6 @@ AboutNewTabService.prototype = {
case "nsPref:changed": case "nsPref:changed":
if (data === PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS) { if (data === PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS) {
this._privilegedContentProcess = Services.prefs.getBoolPref(PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS); this._privilegedContentProcess = Services.prefs.getBoolPref(PREF_SEPARATE_PRIVILEGED_CONTENT_PROCESS);
this.notifyChange();
} else if (data === PREF_ACTIVITY_STREAM_PRERENDER_ENABLED) { } else if (data === PREF_ACTIVITY_STREAM_PRERENDER_ENABLED) {
this._activityStreamPrerender = Services.prefs.getBoolPref(PREF_ACTIVITY_STREAM_PRERENDER_ENABLED); this._activityStreamPrerender = Services.prefs.getBoolPref(PREF_ACTIVITY_STREAM_PRERENDER_ENABLED);
this.notifyChange(); this.notifyChange();

View File

@ -4,9 +4,7 @@ XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
"nsIAboutNewTabService"); "nsIAboutNewTabService");
// Tests are by default run with non-debug en-US configuration // Tests are by default run with non-debug en-US configuration
const DEFAULT_URL = SpecialPowers.getBoolPref("browser.tabs.remote.separatePrivilegedContentProcess") const DEFAULT_URL = "resource://activity-stream/prerendered/en-US/activity-stream-prerendered.html";
? "resource://activity-stream/prerendered/en-US/activity-stream-prerendered-noscripts.html"
: "resource://activity-stream/prerendered/en-US/activity-stream-prerendered.html";
/** /**
* Temporarily change the app locale to get the localized activity stream url * Temporarily change the app locale to get the localized activity stream url

View File

@ -14,13 +14,16 @@ XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
const IS_RELEASE_OR_BETA = AppConstants.RELEASE_OR_BETA; const IS_RELEASE_OR_BETA = AppConstants.RELEASE_OR_BETA;
const ACTIVITY_STREAM_PRERENDER_URL = "resource://activity-stream/prerendered/en-US/activity-stream-prerendered.html";
const ACTIVITY_STREAM_PRERENDER_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-prerendered-debug.html";
const ACTIVITY_STREAM_URL = "resource://activity-stream/prerendered/en-US/activity-stream.html";
const ACTIVITY_STREAM_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-debug.html";
const DOWNLOADS_URL = "chrome://browser/content/downloads/contentAreaDownloadsView.xul"; const DOWNLOADS_URL = "chrome://browser/content/downloads/contentAreaDownloadsView.xul";
const SEPARATE_PRIVILEGED_CONTENT_PROCESS_PREF = "browser.tabs.remote.separatePrivilegedContentProcess";
const ACTIVITY_STREAM_PRERENDER_PREF = "browser.newtabpage.activity-stream.prerender"; const ACTIVITY_STREAM_PRERENDER_PREF = "browser.newtabpage.activity-stream.prerender";
const ACTIVITY_STREAM_DEBUG_PREF = "browser.newtabpage.activity-stream.debug"; const ACTIVITY_STREAM_DEBUG_PREF = "browser.newtabpage.activity-stream.debug";
function cleanup() { function cleanup() {
Services.prefs.clearUserPref(SEPARATE_PRIVILEGED_CONTENT_PROCESS_PREF);
Services.prefs.clearUserPref(ACTIVITY_STREAM_PRERENDER_PREF); Services.prefs.clearUserPref(ACTIVITY_STREAM_PRERENDER_PREF);
Services.prefs.clearUserPref(ACTIVITY_STREAM_DEBUG_PREF); Services.prefs.clearUserPref(ACTIVITY_STREAM_DEBUG_PREF);
aboutNewTabService.resetNewTabURL(); aboutNewTabService.resetNewTabURL();
@ -28,41 +31,6 @@ function cleanup() {
registerCleanupFunction(cleanup); registerCleanupFunction(cleanup);
let ACTIVITY_STREAM_PRERENDER_URL;
let ACTIVITY_STREAM_PRERENDER_DEBUG_URL;
let ACTIVITY_STREAM_URL;
let ACTIVITY_STREAM_DEBUG_URL;
function setExpectedUrlsWithScripts() {
ACTIVITY_STREAM_PRERENDER_URL = "resource://activity-stream/prerendered/en-US/activity-stream-prerendered.html";
ACTIVITY_STREAM_PRERENDER_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-prerendered-debug.html";
ACTIVITY_STREAM_URL = "resource://activity-stream/prerendered/en-US/activity-stream.html";
ACTIVITY_STREAM_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-debug.html";
}
function setExpectedUrlsWithoutScripts() {
ACTIVITY_STREAM_PRERENDER_URL = "resource://activity-stream/prerendered/en-US/activity-stream-prerendered-noscripts.html";
ACTIVITY_STREAM_PRERENDER_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-prerendered-debug-noscripts.html";
ACTIVITY_STREAM_URL = "resource://activity-stream/prerendered/en-US/activity-stream-noscripts.html";
ACTIVITY_STREAM_DEBUG_URL = "resource://activity-stream/prerendered/static/activity-stream-debug-noscripts.html";
}
// Default expected URLs to files with scripts in them.
setExpectedUrlsWithScripts();
function addTestsWithPrivilegedContentProcessPref(test) {
add_task(async() => {
await setPrivilegedContentProcessPref(true);
setExpectedUrlsWithoutScripts();
await test();
});
add_task(async() => {
await setPrivilegedContentProcessPref(false);
setExpectedUrlsWithScripts();
await test();
});
}
function nextChangeNotificationPromise(aNewURL, testMessage) { function nextChangeNotificationPromise(aNewURL, testMessage) {
return new Promise(resolve => { return new Promise(resolve => {
Services.obs.addObserver(function observer(aSubject, aTopic, aData) { // jshint unused:false Services.obs.addObserver(function observer(aSubject, aTopic, aData) { // jshint unused:false
@ -95,16 +63,6 @@ function setupASPrerendered() {
return notificationPromise; return notificationPromise;
} }
function setPrivilegedContentProcessPref(usePrivilegedContentProcess) {
if (usePrivilegedContentProcess === Services.prefs.getBoolPref(SEPARATE_PRIVILEGED_CONTENT_PROCESS_PREF)) {
return Promise.resolve();
}
let notificationPromise = nextChangeNotificationPromise("about:newtab");
Services.prefs.setBoolPref(SEPARATE_PRIVILEGED_CONTENT_PROCESS_PREF, usePrivilegedContentProcess);
return notificationPromise;
}
add_task(async function test_as_and_prerender_initialized() { add_task(async function test_as_and_prerender_initialized() {
Assert.ok(aboutNewTabService.activityStreamEnabled, Assert.ok(aboutNewTabService.activityStreamEnabled,
".activityStreamEnabled should be set to the correct initial value"); ".activityStreamEnabled should be set to the correct initial value");
@ -147,11 +105,10 @@ add_task(async function test_override_activity_stream_disabled() {
cleanup(); cleanup();
}); });
addTestsWithPrivilegedContentProcessPref(async function test_override_activity_stream_enabled() { add_task(async function test_override_activity_stream_enabled() {
let notificationPromise = await setupASPrerendered(); let notificationPromise = await setupASPrerendered();
Assert.equal(aboutNewTabService.defaultURL, ACTIVITY_STREAM_PRERENDER_URL, Assert.equal(aboutNewTabService.defaultURL, ACTIVITY_STREAM_PRERENDER_URL, "Newtab URL should be the default activity stream prerendered URL");
"Newtab URL should be the default activity stream prerendered URL");
Assert.ok(!aboutNewTabService.overridden, "Newtab URL should not be overridden"); Assert.ok(!aboutNewTabService.overridden, "Newtab URL should not be overridden");
Assert.ok(aboutNewTabService.activityStreamEnabled, "Activity Stream should be enabled"); Assert.ok(aboutNewTabService.activityStreamEnabled, "Activity Stream should be enabled");
Assert.ok(aboutNewTabService.activityStreamPrerender, "Activity Stream should be prerendered"); Assert.ok(aboutNewTabService.activityStreamPrerender, "Activity Stream should be prerendered");
@ -170,9 +127,8 @@ addTestsWithPrivilegedContentProcessPref(async function test_override_activity_s
cleanup(); cleanup();
}); });
addTestsWithPrivilegedContentProcessPref(async function test_default_url() { add_task(async function test_default_url() {
await setupASPrerendered(); await setupASPrerendered();
Assert.equal(aboutNewTabService.defaultURL, ACTIVITY_STREAM_PRERENDER_URL, Assert.equal(aboutNewTabService.defaultURL, ACTIVITY_STREAM_PRERENDER_URL,
"Newtab defaultURL initially set to prerendered AS url"); "Newtab defaultURL initially set to prerendered AS url");
@ -205,7 +161,7 @@ addTestsWithPrivilegedContentProcessPref(async function test_default_url() {
cleanup(); cleanup();
}); });
addTestsWithPrivilegedContentProcessPref(async function test_welcome_url() { add_task(async function test_welcome_url() {
await setupASPrerendered(); await setupASPrerendered();
Assert.equal(aboutNewTabService.activityStreamPrerender, true, Assert.equal(aboutNewTabService.activityStreamPrerender, true,
@ -238,11 +194,11 @@ add_task(function test_locale() {
}); });
/** /**
* Tests response to updates to prefs * Tests reponse to updates to prefs
*/ */
addTestsWithPrivilegedContentProcessPref(async function test_updates() { add_task(async function test_updates() {
// Simulates a "cold-boot" situation, with some pref already set before testing a series // Simulates a "cold-boot" situation, with some pref already set before testing a series
// of changes. // of changes.
await setupASPrerendered(); await setupASPrerendered();
aboutNewTabService.resetNewTabURL(); // need to set manually because pref notifs are off aboutNewTabService.resetNewTabURL(); // need to set manually because pref notifs are off

View File

@ -2436,17 +2436,8 @@ var SessionStoreInternal = {
let newTab = aWindow.gBrowser.addTrustedTab(null, tabOptions); let newTab = aWindow.gBrowser.addTrustedTab(null, tabOptions);
// Start the throbber to pretend we're doing something while actually // Start the throbber to pretend we're doing something while actually
// waiting for data from the frame script. This throbber is disabled // waiting for data from the frame script.
// if the URI is a local about: URI. newTab.setAttribute("busy", "true");
let uriObj = aTab.linkedBrowser.currentURI;
if (!uriObj || (uriObj && !aWindow.gBrowser.isLocalAboutURI(uriObj))) {
newTab.setAttribute("busy", "true");
}
// Hack to ensure that the about:home, about:newtab, and about:welcome
// favicon is loaded instantaneously, to avoid flickering and improve
// perceived performance.
aWindow.gBrowser.setDefaultIcon(newTab, uriObj);
// Collect state before flushing. // Collect state before flushing.
let tabState = TabState.collect(aTab, TAB_CUSTOM_VALUES.get(aTab)); let tabState = TabState.collect(aTab, TAB_CUSTOM_VALUES.get(aTab));
@ -2783,14 +2774,7 @@ var SessionStoreInternal = {
// Restore the tab icon. // Restore the tab icon.
if ("image" in tabData) { if ("image" in tabData) {
// We know that about:blank is safe to load in any remote type. Since win.gBrowser.setIcon(tab, tabData.image, undefined, tabData.iconLoadingPrincipal);
// SessionStore is triggered with about:blank, there must be a process
// flip. We will ignore the first about:blank load to prevent resetting the
// favicon that we have set earlier to avoid flickering and improve
// perceived performance.
if (!activePageData || (activePageData && activePageData.url != "about:blank")) {
win.gBrowser.setIcon(tab, tabData.image, undefined, tabData.iconLoadingPrincipal);
}
TabStateCache.update(browser, { image: null, iconLoadingPrincipal: null }); TabStateCache.update(browser, { image: null, iconLoadingPrincipal: null });
} }
}, },
@ -3030,22 +3014,9 @@ var SessionStoreInternal = {
return; return;
} }
let uriObj;
try {
uriObj = Services.io.newURI(loadArguments.uri);
} catch (e) {}
// Start the throbber to pretend we're doing something while actually // Start the throbber to pretend we're doing something while actually
// waiting for data from the frame script. This throbber is disabled // waiting for data from the frame script.
// if the URI is a local about: URI. tab.setAttribute("busy", "true");
if (!uriObj || (uriObj && !window.gBrowser.isLocalAboutURI(uriObj))) {
tab.setAttribute("busy", "true");
}
// Hack to ensure that the about:home, about:newtab, and about:welcome
// favicon is loaded instantaneously, to avoid flickering and improve
// perceived performance.
window.gBrowser.setDefaultIcon(tab, uriObj);
// Flush to get the latest tab state. // Flush to get the latest tab state.
TabStateFlusher.flush(browser).then(() => { TabStateFlusher.flush(browser).then(() => {
@ -4071,7 +4042,7 @@ var SessionStoreInternal = {
requestTime: Services.telemetry.msSystemNow()}); requestTime: Services.telemetry.msSystemNow()});
// Focus the tab's content area. // Focus the tab's content area.
if (aTab.selected && !window.isBlankPageURL(uri)) { if (aTab.selected) {
browser.focus(); browser.focus();
} }
}, },

View File

@ -1365,12 +1365,12 @@ var UITour = {
}, },
showNewTab(aWindow, aBrowser) { showNewTab(aWindow, aBrowser) {
aWindow.gURLBar.focus();
let url = "about:newtab"; let url = "about:newtab";
aWindow.openLinkIn(url, "current", { aWindow.openLinkIn(url, "current", {
targetBrowser: aBrowser, targetBrowser: aBrowser,
triggeringPrincipal: Services.scriptSecurityManager.createCodebasePrincipal(Services.io.newURI(url), {}), triggeringPrincipal: Services.scriptSecurityManager.createCodebasePrincipal(Services.io.newURI(url), {}),
}); });
aWindow.gURLBar.focus();
}, },
_hideAnnotationsForPanel(aEvent, aShouldClosePanel, aTargetPositionCallback) { _hideAnnotationsForPanel(aEvent, aShouldClosePanel, aTargetPositionCallback) {

View File

@ -353,7 +353,7 @@ class AsyncTabSwitcher {
// determined by the busy state on the tab element and checking // determined by the busy state on the tab element and checking
// if the loaded URI is local. // if the loaded URI is local.
let hasSufficientlyLoaded = !this.requestedTab.hasAttribute("busy") && let hasSufficientlyLoaded = !this.requestedTab.hasAttribute("busy") &&
!this.tabbrowser.isLocalAboutURI(requestedBrowser.currentURI); !this.tabbrowser._isLocalAboutURI(requestedBrowser.currentURI);
let fl = requestedBrowser.frameLoader; let fl = requestedBrowser.frameLoader;
shouldBeBlank = !this.minimizedOrFullyOccluded && shouldBeBlank = !this.minimizedOrFullyOccluded &&

View File

@ -106,18 +106,12 @@ function swapToInnerBrowser({ tab, containerURL, getInnerBrowser }) {
async start() { async start() {
// In some cases, such as a preloaded browser used for about:newtab, browser code // In some cases, such as a preloaded browser used for about:newtab, browser code
// will force a new frameloader on next navigation to remote content to ensure // will force a new frameloader on next navigation to ensure balanced process
// balanced process assignment. If this case will happen here, navigate to // assignment. If this case will happen here, navigate to about:blank first to get
// about:blank first to get this out of way so that we stay within one process while // this out of way so that we stay within one process while RDM is open.
// RDM is open. Some process selection rules are specific to remote content, so we const { newFrameloader } = E10SUtils.shouldLoadURIInBrowser(
// use `http://example.com` as a test for what a remote navigation would cause. tab.linkedBrowser,
const { "about:blank"
requiredRemoteType,
mustChangeProcess,
newFrameloader,
} = E10SUtils.shouldLoadURIInBrowser(
tab.linkedBrowser,
"http://example.com"
); );
if (newFrameloader) { if (newFrameloader) {
debug(`Tab will force a new frameloader on navigation, load about:blank first`); debug(`Tab will force a new frameloader on navigation, load about:blank first`);
@ -126,12 +120,6 @@ function swapToInnerBrowser({ tab, containerURL, getInnerBrowser }) {
triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}), triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}),
}); });
} }
if (mustChangeProcess) {
debug(`Tab will force a process flip on navigation, load about:blank first`);
gBrowser.updateBrowserRemoteness(tab.linkedBrowser, true, {
remoteType: requiredRemoteType,
});
}
tab.isResponsiveDesignMode = true; tab.isResponsiveDesignMode = true;

View File

@ -11,10 +11,10 @@ add_task(async function test() {
const url = "http://mochi.test:8888/browser/dom/xhr/tests/browser_xhr_onchange_leak.html"; const url = "http://mochi.test:8888/browser/dom/xhr/tests/browser_xhr_onchange_leak.html";
let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
let browser = gBrowser.selectedBrowser; let browser = gBrowser.selectedBrowser;
let done = await ContentTask.spawn(browser, {}, async function(browser) { let done = await ContentTask.spawn(browser,{}, async function(browser){
let doc = content.document; let doc = content.document;
let promise = ContentTaskUtils.waitForEvent(this, "DOMContentLoaded", true); let promise = ContentTaskUtils.waitForEvent(this, "DOMContentLoaded", true);
content.location = "http://example.org/"; content.location = "about:home";
await promise; await promise;
return true; return true;
}); });

View File

@ -10,17 +10,17 @@ add_task(async function test() {
let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
let browser = gBrowser.selectedBrowser; let browser = gBrowser.selectedBrowser;
let innerWindowId = browser.innerWindowID; let innerWindowId = browser.innerWindowID;
let contentDocDead = await ContentTask.spawn(browser, {innerWindowId}, async function(args) { let contentDocDead = await ContentTask.spawn(browser,{innerWindowId}, async function(args){
let doc = content.document; let doc = content.document;
let {TestUtils} = ChromeUtils.import("resource://testing-common/TestUtils.jsm", {}); let {TestUtils} = ChromeUtils.import("resource://testing-common/TestUtils.jsm", {});
let promise = TestUtils.topicObserved("inner-window-nuked", (subject, data) => { let promise = TestUtils.topicObserved("inner-window-nuked", (subject, data) => {
let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data; let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
return id == args.innerWindowId; return id == args.innerWindowId;
}); });
content.location = "http://example.org/"; content.location = "about:home";
await promise; await promise;
return Cu.isDeadWrapper(doc); return Cu.isDeadWrapper(doc);
}); });
is(contentDocDead, true, "wrapper is dead"); is(contentDocDead, true, "wrapper is dead");
BrowserTestUtils.removeTab(newTab); BrowserTestUtils.removeTab(newTab);
}); });

View File

@ -599,8 +599,12 @@ var BrowserTestUtils = {
if (url) { if (url) {
let browser = win.gBrowser.selectedBrowser; let browser = win.gBrowser.selectedBrowser;
// Retrieve the given browser's current process type.
let process =
browser.isRemoteBrowser ? Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT
: Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
if (win.gMultiProcessBrowser && if (win.gMultiProcessBrowser &&
!E10SUtils.canLoadURIInRemoteType(url, browser.remoteType)) { !E10SUtils.canLoadURIInProcess(url, process)) {
await this.waitForEvent(browser, "XULFrameLoaderCreated"); await this.waitForEvent(browser, "XULFrameLoaderCreated");
} }
@ -643,10 +647,14 @@ var BrowserTestUtils = {
return; return;
} }
// Retrieve the given browser's current process type.
let process = browser.isRemoteBrowser ? Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT
: Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
// If the new URI can't load in the browser's current process then we // If the new URI can't load in the browser's current process then we
// should wait for the new frameLoader to be created. This will happen // should wait for the new frameLoader to be created. This will happen
// asynchronously when the browser's remoteness changes. // asynchronously when the browser's remoteness changes.
if (!E10SUtils.canLoadURIInRemoteType(uri, browser.remoteType)) { if (!E10SUtils.canLoadURIInProcess(uri, process)) {
await this.waitForEvent(browser, "XULFrameLoaderCreated"); await this.waitForEvent(browser, "XULFrameLoaderCreated");
} }
}, },

View File

@ -2,7 +2,7 @@
ChromeUtils.import("resource://gre/modules/Timer.jsm", this); ChromeUtils.import("resource://gre/modules/Timer.jsm", this);
const TEST_PAGE_URI = "data:text/html;charset=utf-8,The letter s."; const TEST_PAGE_URI = "data:text/html;charset=utf-8,The letter s.";
// Using 'javascript' schema to bypass E10SUtils.canLoadURIInRemoteType, because // Using 'javascript' schema to bypass E10SUtils.canLoadURIInProcess, because
// it does not allow 'data:' URI to be loaded in the parent process. // it does not allow 'data:' URI to be loaded in the parent process.
const E10S_PARENT_TEST_PAGE_URI = "javascript:document.write('The letter s.');"; const E10S_PARENT_TEST_PAGE_URI = "javascript:document.write('The letter s.');";

View File

@ -90,14 +90,10 @@ var E10SUtils = {
PRIVILEGED_REMOTE_TYPE, PRIVILEGED_REMOTE_TYPE,
LARGE_ALLOCATION_REMOTE_TYPE, LARGE_ALLOCATION_REMOTE_TYPE,
canLoadURIInRemoteType(aURL, aRemoteType = DEFAULT_REMOTE_TYPE) { canLoadURIInProcess(aURL, aProcess) {
// We need a strict equality here because the value of `NOT_REMOTE` is let remoteType = aProcess == Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT
// `null`, and there is a possibility that `undefined` is passed as the ? DEFAULT_REMOTE_TYPE : NOT_REMOTE;
// second argument, which might result a load in the parent process. return remoteType == this.getRemoteTypeForURI(aURL, true, remoteType);
let preferredRemoteType = aRemoteType === NOT_REMOTE
? NOT_REMOTE
: DEFAULT_REMOTE_TYPE;
return aRemoteType == this.getRemoteTypeForURI(aURL, true, preferredRemoteType);
}, },
getRemoteTypeForURI(aURL, aMultiProcess, getRemoteTypeForURI(aURL, aMultiProcess,

View File

@ -3081,9 +3081,10 @@ var gDetailView = {
let policy = ExtensionParent.WebExtensionPolicy.getByID(this._addon.id); let policy = ExtensionParent.WebExtensionPolicy.getByID(this._addon.id);
browser.sameProcessAsFrameLoader = policy.extension.groupFrameLoader; browser.sameProcessAsFrameLoader = policy.extension.groupFrameLoader;
} }
let remote = !E10SUtils.canLoadURIInProcess(optionsURL, Services.appinfo.PROCESS_TYPE_DEFAULT);
let readyPromise; let readyPromise;
if (E10SUtils.canLoadURIInRemoteType(optionsURL, E10SUtils.EXTENSION_REMOTE_TYPE)) { if (remote) {
browser.setAttribute("remote", "true"); browser.setAttribute("remote", "true");
browser.setAttribute("remoteType", E10SUtils.EXTENSION_REMOTE_TYPE); browser.setAttribute("remoteType", E10SUtils.EXTENSION_REMOTE_TYPE);
readyPromise = promiseEvent("XULFrameLoaderCreated", browser); readyPromise = promiseEvent("XULFrameLoaderCreated", browser);