From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- ...wser_new_tab_in_privilegedabout_process_pref.js | 230 +++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 browser/base/content/test/tabs/browser_new_tab_in_privilegedabout_process_pref.js (limited to 'browser/base/content/test/tabs/browser_new_tab_in_privilegedabout_process_pref.js') diff --git a/browser/base/content/test/tabs/browser_new_tab_in_privilegedabout_process_pref.js b/browser/base/content/test/tabs/browser_new_tab_in_privilegedabout_process_pref.js new file mode 100644 index 0000000000..6ab6ce198e --- /dev/null +++ b/browser/base/content/test/tabs/browser_new_tab_in_privilegedabout_process_pref.js @@ -0,0 +1,230 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/** + * Tests to ensure that Activity Stream loads in the privileged about: + * content process. Normal http web pages should load in the web content + * process. + * Ref: Bug 1469072. + */ + +const ABOUT_BLANK = "about:blank"; +const ABOUT_HOME = "about:home"; +const ABOUT_NEWTAB = "about:newtab"; +const ABOUT_WELCOME = "about:welcome"; +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const TEST_HTTP = "http://example.org/"; + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.newtab.preload", false], + ["browser.tabs.remote.separatePrivilegedContentProcess", true], + ["dom.ipc.processCount.privilegedabout", 1], + ["dom.ipc.keepProcessesAlive.privilegedabout", 1], + ], + }); +}); + +/* + * Test to ensure that the Activity Stream tabs open in privileged about: content + * process. We will first open an about:newtab page that acts as a reference to + * the privileged about: content process. With the reference, we can then open + * Activity Stream links in a new tab and ensure that the new tab opens in the same + * privileged about: content process as our reference. + */ +add_task(async function activity_stream_in_privileged_content_process() { + Services.ppmm.releaseCachedProcesses(); + + await BrowserTestUtils.withNewTab(ABOUT_NEWTAB, async function (browser1) { + checkBrowserRemoteType(browser1, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE); + + // Note the processID for about:newtab for comparison later. + let privilegedPid = browser1.frameLoader.remoteTab.osPid; + + for (let url of [ + ABOUT_NEWTAB, + ABOUT_WELCOME, + ABOUT_HOME, + `${ABOUT_NEWTAB}#foo`, + `${ABOUT_WELCOME}#bar`, + `${ABOUT_HOME}#baz`, + `${ABOUT_NEWTAB}?q=foo`, + `${ABOUT_WELCOME}?q=bar`, + `${ABOUT_HOME}?q=baz`, + ]) { + await BrowserTestUtils.withNewTab(url, async function (browser2) { + is( + browser2.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that about:newtab tabs are in the same privileged about: content process." + ); + }); + } + }); + + Services.ppmm.releaseCachedProcesses(); +}); + +/* + * Test to ensure that a process switch occurs when navigating between normal + * web pages and Activity Stream pages in the same tab. + */ +add_task(async function process_switching_through_loading_in_the_same_tab() { + Services.ppmm.releaseCachedProcesses(); + + await BrowserTestUtils.withNewTab(TEST_HTTP, async function (browser) { + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + for (let [url, remoteType] of [ + [ABOUT_NEWTAB, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [ABOUT_BLANK, E10SUtils.WEB_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [ABOUT_HOME, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [ABOUT_WELCOME, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [ABOUT_BLANK, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_NEWTAB}#foo`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_WELCOME}#bar`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_HOME}#baz`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_NEWTAB}?q=foo`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_WELCOME}?q=bar`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + [`${ABOUT_HOME}?q=baz`, E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE], + [TEST_HTTP, E10SUtils.WEB_REMOTE_TYPE], + ]) { + BrowserTestUtils.loadURIString(browser, url); + await BrowserTestUtils.browserLoaded(browser, false, url); + checkBrowserRemoteType(browser, remoteType); + } + }); + + Services.ppmm.releaseCachedProcesses(); +}); + +/* + * Test to ensure that a process switch occurs when navigating between normal + * web pages and Activity Stream pages using the browser's navigation features + * such as history and location change. + */ +add_task(async function process_switching_through_navigation_features() { + Services.ppmm.releaseCachedProcesses(); + + await BrowserTestUtils.withNewTab( + ABOUT_NEWTAB, + async function (initialBrowser) { + checkBrowserRemoteType( + initialBrowser, + E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE + ); + + // Note the processID for about:newtab for comparison later. + let privilegedPid = initialBrowser.frameLoader.remoteTab.osPid; + + function assertIsPrivilegedProcess(browser, desc) { + is( + browser.messageManager.remoteType, + E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE, + `Check that ${desc} is loaded in privileged about: content process.` + ); + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + `Check that ${desc} is loaded in original privileged process.` + ); + } + + // Check that about:newtab opened from JS in about:newtab page is in the same process. + let promiseTabOpened = BrowserTestUtils.waitForNewTab( + gBrowser, + ABOUT_NEWTAB, + true + ); + await SpecialPowers.spawn(initialBrowser, [ABOUT_NEWTAB], uri => { + content.open(uri, "_blank"); + }); + let newTab = await promiseTabOpened; + registerCleanupFunction(async function () { + BrowserTestUtils.removeTab(newTab); + }); + let browser = newTab.linkedBrowser; + assertIsPrivilegedProcess(browser, "new tab opened from about:newtab"); + + // Check that reload does not break the privileged about: content process affinity. + BrowserReload(); + await BrowserTestUtils.browserLoaded(browser, false, ABOUT_NEWTAB); + assertIsPrivilegedProcess(browser, "about:newtab after reload"); + + // Load http webpage + BrowserTestUtils.loadURIString(browser, TEST_HTTP); + await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP); + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + // Check that using the history back feature switches back to privileged about: content process. + let promiseLocation = BrowserTestUtils.waitForLocationChange( + gBrowser, + ABOUT_NEWTAB + ); + browser.goBack(); + await promiseLocation; + // 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.goForward(); + await BrowserTestUtils.browserLoaded(browser); + assertIsPrivilegedProcess(browser, "about:newtab after history goBack"); + + // Check that using the history forward feature switches back to the web content process. + promiseLocation = BrowserTestUtils.waitForLocationChange( + gBrowser, + TEST_HTTP + ); + browser.goForward(); + await promiseLocation; + // 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); + await BrowserTestUtils.browserLoaded(browser); + checkBrowserRemoteType( + browser, + E10SUtils.WEB_REMOTE_TYPE, + "Check that tab runs in the web content process after using history goForward." + ); + + // Check that goto history index does not break the affinity. + promiseLocation = BrowserTestUtils.waitForLocationChange( + gBrowser, + ABOUT_NEWTAB + ); + browser.gotoIndex(0); + await promiseLocation; + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that about:newtab is in privileged about: content process after history gotoIndex." + ); + assertIsPrivilegedProcess( + browser, + "about:newtab after history goToIndex" + ); + + BrowserTestUtils.loadURIString(browser, TEST_HTTP); + await BrowserTestUtils.browserLoaded(browser, false, TEST_HTTP); + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + // Check that location change causes a change in process type as well. + await SpecialPowers.spawn(browser, [ABOUT_NEWTAB], uri => { + content.location = uri; + }); + await BrowserTestUtils.browserLoaded(browser, false, ABOUT_NEWTAB); + assertIsPrivilegedProcess(browser, "about:newtab after location change"); + } + ); + + Services.ppmm.releaseCachedProcesses(); +}); -- cgit v1.2.3