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 --- ...browser_ext_webNavigation_containerIsolation.js | 169 +++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_webNavigation_containerIsolation.js (limited to 'browser/components/extensions/test/browser/browser_ext_webNavigation_containerIsolation.js') diff --git a/browser/components/extensions/test/browser/browser_ext_webNavigation_containerIsolation.js b/browser/components/extensions/test/browser/browser_ext_webNavigation_containerIsolation.js new file mode 100644 index 0000000000..3bf849b518 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_webNavigation_containerIsolation.js @@ -0,0 +1,169 @@ +"use strict"; + +add_task(async function containerIsolation_restricted() { + await SpecialPowers.pushPrefEnv({ + set: [ + ["extensions.userContextIsolation.enabled", true], + ["privacy.userContext.enabled", true], + ], + }); + + let helperExtension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs", "cookies", "webNavigation"], + }, + + async background() { + browser.webNavigation.onCompleted.addListener(details => { + browser.test.sendMessage("tabCreated", details.tabId); + }); + browser.test.onMessage.addListener(async message => { + switch (message.subject) { + case "createTab": { + await browser.tabs.create({ + url: message.data.url, + cookieStoreId: message.data.cookieStoreId, + }); + break; + } + } + }); + }, + }); + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["webNavigation"], + }, + + async background() { + let eventNames = [ + "onBeforeNavigate", + "onCommitted", + "onDOMContentLoaded", + "onCompleted", + ]; + + const initialEmptyTabs = await browser.tabs.query({ active: true }); + browser.test.assertEq( + 1, + initialEmptyTabs.length, + `Got one initial empty tab as expected: ${JSON.stringify( + initialEmptyTabs + )}` + ); + + for (let eventName of eventNames) { + browser.webNavigation[eventName].addListener(details => { + if (details.tabId === initialEmptyTabs[0].id) { + // Ignore webNavigation related to the initial about:blank tab, it may be technically + // still being loading when we start this test extension to run the test scenario. + return; + } + browser.test.assertEq( + "http://www.example.com/?allowed", + details.url, + `expected ${eventName} event` + ); + browser.test.sendMessage(eventName, details.tabId); + }); + } + + const [restrictedTab, unrestrictedTab, noContainerTab] = + await new Promise(resolve => { + browser.test.onMessage.addListener(message => resolve(message)); + }); + + await browser.test.assertRejects( + browser.webNavigation.getFrame({ + tabId: restrictedTab, + frameId: 0, + }), + `Invalid tab ID: ${restrictedTab}`, + "getFrame rejected Promise should pass the expected error" + ); + + await browser.test.assertRejects( + browser.webNavigation.getAllFrames({ tabId: restrictedTab }), + `Invalid tab ID: ${restrictedTab}`, + "getAllFrames rejected Promise should pass the expected error" + ); + + await browser.tabs.remove(unrestrictedTab); + await browser.tabs.remove(noContainerTab); + + browser.test.sendMessage("done"); + }, + }); + + await extension.startup(); + + await SpecialPowers.pushPrefEnv({ + set: [ + [`extensions.userContextIsolation.${extension.id}.restricted`, "[1]"], + ], + }); + + await helperExtension.startup(); + + helperExtension.sendMessage({ + subject: "createTab", + data: { + url: "http://www.example.com/?restricted", + cookieStoreId: "firefox-container-1", + }, + }); + + const restrictedTab = await helperExtension.awaitMessage("tabCreated"); + + helperExtension.sendMessage({ + subject: "createTab", + data: { + url: "http://www.example.com/?allowed", + cookieStoreId: "firefox-container-2", + }, + }); + + const unrestrictedTab = await helperExtension.awaitMessage("tabCreated"); + + helperExtension.sendMessage({ + subject: "createTab", + data: { + url: "http://www.example.com/?allowed", + }, + }); + + const noContainerTab = await helperExtension.awaitMessage("tabCreated"); + + let eventNames = [ + "onBeforeNavigate", + "onCommitted", + "onDOMContentLoaded", + "onCompleted", + ]; + for (let eventName of eventNames) { + let recTabId1 = await extension.awaitMessage(eventName); + let recTabId2 = await extension.awaitMessage(eventName); + + Assert.equal( + recTabId1, + unrestrictedTab, + `Expected unrestricted tab with tabId: ${unrestrictedTab} from ${eventName} event` + ); + + Assert.equal( + recTabId2, + noContainerTab, + `Expected noContainer tab with tabId: ${noContainerTab} from ${eventName} event` + ); + } + + extension.sendMessage([restrictedTab, unrestrictedTab, noContainerTab]); + + await extension.awaitMessage("done"); + + await extension.unload(); + await helperExtension.unload(); + await SpecialPowers.popPrefEnv(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); -- cgit v1.2.3