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_navigate_through_urls_origin_attributes.js | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 browser/base/content/test/tabs/browser_navigate_through_urls_origin_attributes.js (limited to 'browser/base/content/test/tabs/browser_navigate_through_urls_origin_attributes.js') diff --git a/browser/base/content/test/tabs/browser_navigate_through_urls_origin_attributes.js b/browser/base/content/test/tabs/browser_navigate_through_urls_origin_attributes.js new file mode 100644 index 0000000000..226817a350 --- /dev/null +++ b/browser/base/content/test/tabs/browser_navigate_through_urls_origin_attributes.js @@ -0,0 +1,177 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* import-globals-from helper_origin_attrs_testing.js */ +loadTestSubscript("helper_origin_attrs_testing.js"); + +const PATH = "browser/browser/base/content/test/tabs/blank.html"; + +var TEST_CASES = [ + { uri: "https://example.com/" + PATH }, + { uri: "https://example.org/" + PATH }, + { uri: "about:preferences" }, + { uri: "about:config" }, +]; + +// 3 container tabs, 1 regular tab and 1 private tab +const NUM_PAGES_OPEN_FOR_EACH_TEST_CASE = 5; +var remoteTypes; +var xulFrameLoaderCreatedCounter = {}; + +function handleEventLocal(aEvent) { + if (aEvent.type != "XULFrameLoaderCreated") { + return; + } + // Ignore element in about:preferences and any other special pages + if ("gBrowser" in aEvent.target.ownerGlobal) { + xulFrameLoaderCreatedCounter.numCalledSoFar++; + } +} + +var gPrevRemoteTypeRegularTab; +var gPrevRemoteTypeContainerTab; +var gPrevRemoteTypePrivateTab; + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + ["privacy.userContext.enabled", true], + // don't preload tabs so we don't have extra XULFrameLoaderCreated events + // firing + ["browser.newtab.preload", false], + ], + }); + + requestLongerTimeout(4); +}); + +function setupRemoteTypes() { + gPrevRemoteTypeRegularTab = null; + gPrevRemoteTypeContainerTab = {}; + gPrevRemoteTypePrivateTab = null; + + remoteTypes = getExpectedRemoteTypes( + gFissionBrowser, + NUM_PAGES_OPEN_FOR_EACH_TEST_CASE + ); +} + +add_task(async function testNavigate() { + setupRemoteTypes(); + /** + * Open a regular tab, 3 container tabs and a private window, load about:blank or about:privatebrowsing + * For each test case + * load the uri + * verify correct remote type + * close tabs + */ + + let regularPage = await openURIInRegularTab("about:blank", window); + gPrevRemoteTypeRegularTab = regularPage.tab.linkedBrowser.remoteType; + let containerPages = []; + for ( + var user_context_id = 1; + user_context_id <= NUM_USER_CONTEXTS; + user_context_id++ + ) { + let containerPage = await openURIInContainer( + "about:blank", + window, + user_context_id + ); + gPrevRemoteTypeContainerTab[user_context_id] = + containerPage.tab.linkedBrowser.remoteType; + containerPages.push(containerPage); + } + + let privatePage = await openURIInPrivateTab(); + gPrevRemoteTypePrivateTab = privatePage.tab.linkedBrowser.remoteType; + + for (const testCase of TEST_CASES) { + let uri = testCase.uri; + + await loadURIAndCheckRemoteType( + regularPage.tab.linkedBrowser, + uri, + "regular tab", + gPrevRemoteTypeRegularTab + ); + gPrevRemoteTypeRegularTab = regularPage.tab.linkedBrowser.remoteType; + + for (const page of containerPages) { + await loadURIAndCheckRemoteType( + page.tab.linkedBrowser, + uri, + `container tab ${page.user_context_id}`, + gPrevRemoteTypeContainerTab[page.user_context_id] + ); + gPrevRemoteTypeContainerTab[page.user_context_id] = + page.tab.linkedBrowser.remoteType; + } + + await loadURIAndCheckRemoteType( + privatePage.tab.linkedBrowser, + uri, + "private tab", + gPrevRemoteTypePrivateTab + ); + gPrevRemoteTypePrivateTab = privatePage.tab.linkedBrowser.remoteType; + } + // Close tabs + containerPages.forEach(containerPage => { + BrowserTestUtils.removeTab(containerPage.tab); + }); + BrowserTestUtils.removeTab(regularPage.tab); + BrowserTestUtils.removeTab(privatePage.tab); +}); + +async function loadURIAndCheckRemoteType( + aBrowser, + aURI, + aText, + aPrevRemoteType +) { + let expectedCurr = remoteTypes.shift(); + initXulFrameLoaderCreatedCounter(xulFrameLoaderCreatedCounter); + aBrowser.ownerGlobal.gBrowser.addEventListener( + "XULFrameLoaderCreated", + handleEventLocal + ); + let loaded = BrowserTestUtils.browserLoaded(aBrowser, false, aURI); + info(`About to load ${aURI} in ${aText}`); + await BrowserTestUtils.loadURIString(aBrowser, aURI); + await loaded; + + // Verify correct remote type + is( + expectedCurr, + aBrowser.remoteType, + `correct remote type for ${aURI} ${aText}` + ); + + // Verify XULFrameLoaderCreated firing correct number of times + info( + `XULFrameLoaderCreated was fired ${xulFrameLoaderCreatedCounter.numCalledSoFar} time(s) for ${aURI} ${aText}` + ); + var numExpected = + expectedCurr == aPrevRemoteType && + // With BFCache in the parent we'll get a XULFrameLoaderCreated even if + // expectedCurr == aPrevRemoteType, because we store the old frameloader + // in the BFCache. We have to make an exception for loads in the parent + // process (which have a null aPrevRemoteType/expectedCurr) because + // BFCache in the parent disables caching for those loads. + (!SpecialPowers.Services.appinfo.sessionHistoryInParent || !expectedCurr) + ? 0 + : 1; + is( + xulFrameLoaderCreatedCounter.numCalledSoFar, + numExpected, + `XULFrameLoaderCreated fired correct number of times for ${aURI} ${aText} + prev=${aPrevRemoteType} curr =${aBrowser.remoteType}` + ); + aBrowser.ownerGlobal.gBrowser.removeEventListener( + "XULFrameLoaderCreated", + handleEventLocal + ); +} -- cgit v1.2.3