From acfbcd62fea31a28b25a5116ea7a8a7cc0f7bf8a Mon Sep 17 00:00:00 2001 From: Randell Jesup Date: Mon, 24 Jan 2022 19:38:01 +0000 Subject: [PATCH] Bug 1747261: enable ServiceWorker process-isolation for all domains r=jdescottes Differential Revision: https://phabricator.services.mozilla.com/D134505 --- .../browser_dbg-windowless-service-workers.js | 5 +++++ ...browser_serviceworker_fetch_new_process.js | 21 +------------------ modules/libpref/init/StaticPrefList.yaml | 8 ------- toolkit/modules/E10SUtils.jsm | 16 ++------------ .../test_E10SUtils_workers_remote_types.js | 5 +++-- 5 files changed, 11 insertions(+), 44 deletions(-) diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-windowless-service-workers.js b/devtools/client/debugger/test/mochitest/browser_dbg-windowless-service-workers.js index 863e6194f7c7..1a09bb081e1c 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg-windowless-service-workers.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg-windowless-service-workers.js @@ -121,9 +121,14 @@ add_task(async function() { await removeTab(gBrowser.selectedTab); }); + // Test setting breakpoints while the service worker is starting up. add_task(async function() { info("Subtest #4"); + if (Services.appinfo.fissionAutostart) { + // Disabled when serviceworker isolation is used due to bug 1749341 + return; + } const toolbox = await openNewTabAndToolbox( EXAMPLE_URL + "doc-service-workers.html", diff --git a/dom/workers/test/browser_serviceworker_fetch_new_process.js b/dom/workers/test/browser_serviceworker_fetch_new_process.js index 74d51df78bd8..d6b7c73a0c11 100644 --- a/dom/workers/test/browser_serviceworker_fetch_new_process.js +++ b/dom/workers/test/browser_serviceworker_fetch_new_process.js @@ -322,28 +322,9 @@ add_task(async function test() { // ## Fission Isolation if (Services.appinfo.fissionAutostart) { - const fissionUrl = "example.com"; - const fissionRemoteType = `webIsolated=https://example.com`; - - await do_test_sw(fissionUrl, fissionRemoteType, "synthetic", null); - await do_test_sw(fissionUrl, fissionRemoteType, "synthetic", fileBlob); - - // ## ServiceWorker isolation via allow-list + // ## ServiceWorker isolation const isolateUrl = "example.com"; const isolateRemoteType = `webServiceWorker=https://` + isolateUrl; - await SpecialPowers.pushPrefEnv({ - set: [ - [ - "browser.tabs.remote.serviceWorkerIsolationList", - "https://" + isolateUrl, - ], - [ - "browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", - false, - ], - ["browser.tabs.remote.separatedMozillaDomains", ""], - ], - }); await do_test_sw(isolateUrl, isolateRemoteType, "synthetic", null); await do_test_sw(isolateUrl, isolateRemoteType, "synthetic", fileBlob); } diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 65aca2c4100d..60a2aed2d504 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -1432,14 +1432,6 @@ value: true mirror: always -# Temporary pref which makes certain ServiceWorkers be isolated in special -# processes instead of within a the normal web/webIsolated process based on -# the URI. Entries are separated by commas -- name: browser.tabs.remote.serviceWorkerIsolationList - type: String - value: "" - mirror: never - # When this pref is enabled, opaque response is only allowed to enter the # content process if it's a response for media (audio, image, video), CSS, or # JavaScript. diff --git a/toolkit/modules/E10SUtils.jsm b/toolkit/modules/E10SUtils.jsm index 23ea05a7c762..be7503df1ed1 100644 --- a/toolkit/modules/E10SUtils.jsm +++ b/toolkit/modules/E10SUtils.jsm @@ -44,16 +44,6 @@ XPCOMUtils.defineLazyPreferenceGetter( "browser.tabs.remote.useCrossOriginOpenerPolicy", false ); -// Preference containing the list (comma separated) of origins that will -// have ServiceWorkers isolated in special processes -XPCOMUtils.defineLazyPreferenceGetter( - this, - "serviceWorkerIsolationList", - "browser.tabs.remote.serviceWorkerIsolationList", - "", - false, - val => val.split(",") -); XPCOMUtils.defineLazyServiceGetter( this, "serializationHelper", @@ -250,10 +240,7 @@ function validatedWebRemoteType( if ( aIsWorker && - aWorkerType === Ci.nsIE10SUtils.REMOTE_WORKER_TYPE_SERVICE && - serviceWorkerIsolationList.some(function(val) { - return targetPrincipal.siteOriginNoSuffix == val; - }) + aWorkerType === Ci.nsIE10SUtils.REMOTE_WORKER_TYPE_SERVICE ) { return `${SERVICEWORKER_REMOTE_TYPE}=${targetPrincipal.siteOrigin}`; } @@ -289,6 +276,7 @@ var E10SUtils = { PRIVILEGEDMOZILLA_REMOTE_TYPE, LARGE_ALLOCATION_REMOTE_TYPE, FISSION_WEB_REMOTE_TYPE, + SERVICEWORKER_REMOTE_TYPE, /** * @param aURI The URI of the about page diff --git a/toolkit/modules/tests/xpcshell/test_E10SUtils_workers_remote_types.js b/toolkit/modules/tests/xpcshell/test_E10SUtils_workers_remote_types.js index 29f4cc92f9d1..e0b457a038b1 100644 --- a/toolkit/modules/tests/xpcshell/test_E10SUtils_workers_remote_types.js +++ b/toolkit/modules/tests/xpcshell/test_E10SUtils_workers_remote_types.js @@ -44,6 +44,7 @@ const { NOT_REMOTE, PRIVILEGEDABOUT_REMOTE_TYPE, PRIVILEGEDMOZILLA_REMOTE_TYPE, + SERVICEWORKER_REMOTE_TYPE, WEB_REMOTE_COOP_COEP_TYPE_PREFIX, WEB_REMOTE_TYPE, } = E10SUtils; @@ -77,7 +78,7 @@ add_task(function test_get_remote_type_for_service_worker() { // - content principal + any preferred remote type => web remote type // - fission enabled: // - extension principal + any preferred remote type => extension remote type - // - content principal + any preferred remote type => webIsolated=siteOrigin remote type + // - content principal + any preferred remote type => webServiceWorker=siteOrigin remote type function* getTestCase(fission = false) { const TEST_PRINCIPALS = [ principalSecureCom, @@ -129,7 +130,7 @@ add_task(function test_get_remote_type_for_service_worker() { // Test cases for e10s mode + fission enabled. for (const testCase of getTestCase(true)) { const [msg, principal, ...args] = testCase; - let expected = `${FISSION_WEB_REMOTE_TYPE}=${principal.siteOrigin}`; + let expected = `${SERVICEWORKER_REMOTE_TYPE}=${principal.siteOrigin}`; if (principal == principalExtension) { expected = WebExtensionPolicy.useRemoteWebExtensions