From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../tabs/browser_privilegedmozilla_process_pref.js | 212 +++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 browser/base/content/test/tabs/browser_privilegedmozilla_process_pref.js (limited to 'browser/base/content/test/tabs/browser_privilegedmozilla_process_pref.js') diff --git a/browser/base/content/test/tabs/browser_privilegedmozilla_process_pref.js b/browser/base/content/test/tabs/browser_privilegedmozilla_process_pref.js new file mode 100644 index 0000000000..86ef66c936 --- /dev/null +++ b/browser/base/content/test/tabs/browser_privilegedmozilla_process_pref.js @@ -0,0 +1,212 @@ +/* -*- 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 Mozilla Privileged Webpages load in the privileged + * mozilla web content process. Normal http web pages should load in the web + * content process. + * Ref: Bug 1539595. + */ + +// High and Low Privilege +const TEST_HIGH1 = "https://example.org/"; +const TEST_HIGH2 = "https://test1.example.org/"; +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const TEST_LOW1 = "http://example.org/"; +const TEST_LOW2 = "https://example.com/"; + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.tabs.remote.separatePrivilegedMozillaWebContentProcess", true], + ["browser.tabs.remote.separatedMozillaDomains", "example.org"], + ["dom.ipc.processCount.privilegedmozilla", 1], + ], + }); +}); + +/* + * Test to ensure that the tabs open in privileged mozilla content process. We + * will first open a page that acts as a reference to the privileged mozilla web + * content process. With the reference, we can then open other links in a new tab + * and ensure that the new tab opens in the same privileged mozilla content process + * as our reference. + */ +add_task(async function webpages_in_privileged_content_process() { + Services.ppmm.releaseCachedProcesses(); + + await BrowserTestUtils.withNewTab(TEST_HIGH1, async function (browser1) { + checkBrowserRemoteType(browser1, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE); + + // Note the processID for about:newtab for comparison later. + let privilegedPid = browser1.frameLoader.remoteTab.osPid; + + for (let url of [ + TEST_HIGH1, + `${TEST_HIGH1}#foo`, + `${TEST_HIGH1}?q=foo`, + TEST_HIGH2, + `${TEST_HIGH2}#foo`, + `${TEST_HIGH2}?q=foo`, + ]) { + await BrowserTestUtils.withNewTab(url, async function (browser2) { + is( + browser2.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that privileged pages are in the same privileged mozilla content process." + ); + }); + } + }); + + Services.ppmm.releaseCachedProcesses(); +}); + +/* + * Test to ensure that a process switch occurs when navigating between normal + * web pages and unprivileged pages in the same tab. + */ +add_task(async function process_switching_through_loading_in_the_same_tab() { + Services.ppmm.releaseCachedProcesses(); + + await BrowserTestUtils.withNewTab(TEST_LOW1, async function (browser) { + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + for (let [url, remoteType] of [ + [TEST_HIGH1, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW1, E10SUtils.WEB_REMOTE_TYPE], + [TEST_HIGH1, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW2, E10SUtils.WEB_REMOTE_TYPE], + [TEST_HIGH1, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW1, E10SUtils.WEB_REMOTE_TYPE], + [TEST_LOW2, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}#foo`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW1, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}#bar`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW2, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}#baz`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW1, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}?q=foo`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW2, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}?q=bar`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW1, E10SUtils.WEB_REMOTE_TYPE], + [`${TEST_HIGH1}?q=baz`, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE], + [TEST_LOW2, 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 privileged 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(TEST_HIGH1, async function (browser) { + checkBrowserRemoteType(browser, E10SUtils.PRIVILEGEDMOZILLA_REMOTE_TYPE); + + // Note the processID for about:newtab for comparison later. + let privilegedPid = browser.frameLoader.remoteTab.osPid; + + // Check that about:newtab opened from JS in about:newtab page is in the same process. + let promiseTabOpened = BrowserTestUtils.waitForNewTab( + gBrowser, + TEST_HIGH1, + true + ); + await SpecialPowers.spawn(browser, [TEST_HIGH1], uri => { + content.open(uri, "_blank"); + }); + let newTab = await promiseTabOpened; + registerCleanupFunction(async function () { + BrowserTestUtils.removeTab(newTab); + }); + browser = newTab.linkedBrowser; + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that new tab opened from privileged page is loaded in privileged mozilla content process." + ); + + // Check that reload does not break the privileged mozilla content process affinity. + BrowserReload(); + await BrowserTestUtils.browserLoaded(browser, false, TEST_HIGH1); + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that privileged page is still in privileged mozilla content process after reload." + ); + + // Load http webpage + BrowserTestUtils.loadURIString(browser, TEST_LOW1); + await BrowserTestUtils.browserLoaded(browser, false, TEST_LOW1); + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + // Check that using the history back feature switches back to privileged mozilla content process. + let promiseLocation = BrowserTestUtils.waitForLocationChange( + gBrowser, + TEST_HIGH1 + ); + browser.goBack(); + await promiseLocation; + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that privileged page is still in privileged mozilla content process after history goBack." + ); + + // Check that using the history forward feature switches back to the web content process. + promiseLocation = BrowserTestUtils.waitForLocationChange( + gBrowser, + TEST_LOW1 + ); + browser.goForward(); + await promiseLocation; + 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, + TEST_HIGH1 + ); + browser.gotoIndex(0); + await promiseLocation; + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that privileged page is in privileged mozilla content process after history gotoIndex." + ); + + BrowserTestUtils.loadURIString(browser, TEST_LOW2); + await BrowserTestUtils.browserLoaded(browser, false, TEST_LOW2); + checkBrowserRemoteType(browser, E10SUtils.WEB_REMOTE_TYPE); + + // Check that location change causes a change in process type as well. + await SpecialPowers.spawn(browser, [TEST_HIGH1], uri => { + content.location = uri; + }); + await BrowserTestUtils.browserLoaded(browser, false, TEST_HIGH1); + is( + browser.frameLoader.remoteTab.osPid, + privilegedPid, + "Check that privileged page is in privileged mozilla content process after location change." + ); + }); + + Services.ppmm.releaseCachedProcesses(); +}); -- cgit v1.2.3