diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
commit | 8dd16259287f58f9273002717ec4d27e97127719 (patch) | |
tree | 3863e62a53829a84037444beab3abd4ed9dfc7d0 /toolkit/components/extensions/test/mochitest | |
parent | Releasing progress-linux version 126.0.1-1~progress7.99u1. (diff) | |
download | firefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz firefox-8dd16259287f58f9273002717ec4d27e97127719.zip |
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/test/mochitest')
7 files changed, 298 insertions, 25 deletions
diff --git a/toolkit/components/extensions/test/mochitest/mochitest-common.toml b/toolkit/components/extensions/test/mochitest/mochitest-common.toml index 782069a79c..f49fb131c5 100644 --- a/toolkit/components/extensions/test/mochitest/mochitest-common.toml +++ b/toolkit/components/extensions/test/mochitest/mochitest-common.toml @@ -268,6 +268,8 @@ skip-if = [ "http2", ] +["test_ext_extension_getViews.html"] + ["test_ext_extension_iframe_messaging.html"] skip-if = [ "http3", @@ -350,6 +352,8 @@ skip-if = [ "http2", ] +["test_ext_runtime_getContexts.html"] + ["test_ext_script_filenames.html"] ["test_ext_scripting_contentScripts.html"] @@ -443,12 +447,6 @@ skip-if = [ ] ["test_ext_subframes_privileges.html"] -skip-if = [ - "os == 'android'", # Bug 1845918 - "verify", # Bug 1489771 - "http3", - "http2", -] ["test_ext_tabs_captureTab.html"] skip-if = [ diff --git a/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js index 95ac9af50d..8dec0c6ae5 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js +++ b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js @@ -89,8 +89,10 @@ let expectedBackgroundApis = [ "permissions.remove", "permissions.onAdded", "permissions.onRemoved", + "runtime.ContextType", "runtime.getBackgroundPage", "runtime.getBrowserInfo", + "runtime.getContexts", "runtime.getPlatformInfo", "runtime.onConnectExternal", "runtime.onInstalled", diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html index 076c177dfa..28bbe3b253 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html @@ -14,7 +14,10 @@ add_task(async function setup() { await SpecialPowers.pushPrefEnv({ - set: [["extensions.manifestV3.enabled", true]], + set: [ + ["extensions.manifestV3.enabled", true], + ["extensions.originControls.grantByDefault", false], + ], }); }); diff --git a/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html b/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html new file mode 100644 index 0000000000..9309d45cdf --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html @@ -0,0 +1,108 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>extension.getViews Test</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script> + <script type="text/javascript" src="head.js"></script> + <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="text/javascript"> +"use strict"; + +function genericChecker() { + const params = new URLSearchParams(window.location.search); + const kind = params.get("kind"); + const createdTabIds = []; + + browser.test.onMessage.addListener(async msg => { + if (msg == `${kind}-test-get-views`) { + try { + let result = browser.extension.getViews({}); + browser.test.assertEq(3, result.length, "Expect 3 extension views to be found"); + + result = browser.extension.getViews({ type: "tab" }); + browser.test.assertEq(1, result.length, "Expect 1 tab extension view to be found"); + + result = browser.extension.getViews({ type: "popup" }); + browser.test.assertEq(1, result.length, "Expect 1 popup extension view to be found"); + + browser.test.sendMessage(`${msg}:done`); + } catch (err) { + browser.test.fail(`browser.extension.getViews exception: ${err}`); + browser.test.sendMessage(`${msg}:done`); + } + } else if (msg == `${kind}-open-tab`) { + const tab = await browser.tabs.create({ url: "/page.html?kind=tab" }); + createdTabIds.push(tab.id); + } else if (msg == `${kind}-close-tabs`) { + await browser.tabs.remove(createdTabIds); + browser.test.sendMessage(`${msg}:done`); + } + }); + + browser.test.log(`${kind} extension page loaded`); + browser.test.sendMessage(`${kind}-loaded`); +} + +add_task(async function test_runtime_getContexts() { + const EXT_ID = "runtime-getContexts@mochitest"; + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "temporary", // To automatically show sidebar on load. + incognitoOverride: "spanning", + manifest: { + manifest_version: 3, + browser_specific_settings: { gecko: { id: EXT_ID } }, + + action: { + default_popup: "page.html?kind=action", + default_area: "navbar", + }, + + background: { + page: "page.html?kind=background", + }, + }, + + files: { + "page.html": ` + <!DOCTYPE html> + <html> + <head><meta charset="utf-8"><\/head> + <body> + <script src="page.js"><\/script> + <\/body> + <\/html> + `, + + "page.js": genericChecker, + }, + }); + + await extension.startup(); + await extension.awaitMessage("background-loaded"); + + extension.sendMessage("background-open-tab"); + await extension.awaitMessage("tab-loaded"); + + await AppTestDelegate.clickBrowserAction(window, extension); + await extension.awaitMessage("action-loaded"); + + extension.sendMessage("background-test-get-views"); + await extension.awaitMessage("background-test-get-views:done"); + + // Close popup window. + await AppTestDelegate.closeBrowserAction(window, extension); + + // Close extension page tabs. + extension.sendMessage("background-close-tabs"); + await extension.awaitMessage("background-close-tabs:done"); + + await extension.unload(); +}); + +</script> +</body> +</html> diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html new file mode 100644 index 0000000000..fa3b7385da --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html @@ -0,0 +1,126 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>runtime.getContexts Test</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script> + <script type="text/javascript" src="head.js"></script> + <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="text/javascript"> +"use strict"; + +function genericChecker() { + const params = new URLSearchParams(window.location.search); + const kind = params.get("kind"); + const createdTabIds = []; + + browser.test.onMessage.addListener(async msg => { + if (msg == `${kind}-test-get-contexts`) { + try { + const result = await browser.runtime.getContexts({}); + browser.test.assertEq(3, result.length, "Expect 3 extension contexts to be found"); + + const bgContext = result.find(it => it.contextType === browser.runtime.ContextType.BACKGROUND); + const tabContext = result.find(it => it.documentUrl.endsWith("kind=tab")); + const popupContext = result.find(it => it.documentUrl.endsWith("kind=action")); + + browser.test.assertEq(window.location.href, bgContext.documentUrl, "background context has the expected documentUrl"); + browser.test.assertEq(-1, bgContext.windowId, "background context has the expected windowId"); + browser.test.assertEq(-1, bgContext.tabId, "background context has the expected tabId"); + browser.test.assertEq("TAB", tabContext.contextType, "Got expected tab context type"); + browser.test.assertTrue( + typeof tabContext.windowId === "number" && tabContext.windowId > 0, + "Got expected windowId on tab context" + ); + browser.test.assertTrue( + typeof tabContext.windowId === "number" && tabContext.tabId > 0, + "Got expected tabId on tab context" + ); + browser.test.assertEq( + tabContext.windowId, + popupContext.windowId, + "Poup and tab expected to have the same windowId" + ); + browser.test.assertEq(-1, popupContext.tabId, "popup context has the expected tabId"); + browser.test.assertEq("POPUP", popupContext.contextType, "Got expected popup context type"); + + browser.test.sendMessage(`${msg}:done`); + } catch (err) { + browser.test.fail(`broser.runtime.getContexts call rejected: ${err}`); + browser.test.sendMessage(`${msg}:done`); + } + } else if (msg == `${kind}-open-tab`) { + const tab = await browser.tabs.create({ url: "/page.html?kind=tab" }); + createdTabIds.push(tab.id); + } else if (msg == `${kind}-close-tabs`) { + await browser.tabs.remove(createdTabIds); + browser.test.sendMessage(`${msg}:done`); + } + }); + + browser.test.log(`${kind} extension page loaded`); + browser.test.sendMessage(`${kind}-loaded`); +} + +add_task(async function test_runtime_getContexts() { + const EXT_ID = "runtime-getContexts@mochitest"; + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "temporary", // To automatically show sidebar on load. + incognitoOverride: "spanning", + manifest: { + manifest_version: 3, + browser_specific_settings: { gecko: { id: EXT_ID } }, + + action: { + default_popup: "page.html?kind=action", + default_area: "navbar", + }, + + background: { + page: "page.html?kind=background", + }, + }, + + files: { + "page.html": ` + <!DOCTYPE html> + <html> + <head><meta charset="utf-8"><\/head> + <body> + <script src="page.js"><\/script> + <\/body> + <\/html> + `, + + "page.js": genericChecker, + }, + }); + + await extension.startup(); + await extension.awaitMessage("background-loaded"); + + extension.sendMessage("background-open-tab"); + await extension.awaitMessage("tab-loaded"); + + await AppTestDelegate.clickBrowserAction(window, extension); + await extension.awaitMessage("action-loaded"); + + extension.sendMessage("background-test-get-contexts"); + await extension.awaitMessage("background-test-get-contexts:done"); + + // Close popup window. + await AppTestDelegate.closeBrowserAction(window, extension); + + // Close extension page tabs. + extension.sendMessage("background-close-tabs"); + await extension.awaitMessage("background-close-tabs:done"); + + await extension.unload(); +}); + +</script> +</body> +</html> diff --git a/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html b/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html index 5eb2193409..a0ceed72d5 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html @@ -27,7 +27,10 @@ const makeExtension = ({ manifest: manifestProps, ...otherProps }) => { add_task(async function setup() { await SpecialPowers.pushPrefEnv({ - set: [["extensions.manifestV3.enabled", true]], + set: [ + ["extensions.manifestV3.enabled", true], + ["extensions.originControls.grantByDefault", false], + ], }); }); diff --git a/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html index f791d08602..0586275808 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html @@ -14,6 +14,32 @@ "use strict"; /* eslint-disable mozilla/balanced-listeners */ +const { + WebExtensionPolicy, +} = SpecialPowers.Cu.getGlobalForObject(SpecialPowers.Services); + + +// Some tests load non-moz-extension:-URLs in their extension document. When +// extensions run in-process (extensions.webextensions.remote set to false), +// that fails. +// For details, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1724099 and +// the same function in toolkit/components/extensions/test/xpcshell/head.js +async function allow_unsafe_parent_loads_when_extensions_not_remote() { + if (!WebExtensionPolicy.useRemoteWebExtensions) { + await SpecialPowers.pushPrefEnv({ + set: [["security.allow_unsafe_parent_loads", true]], + }); + } +} + +async function revert_allow_unsafe_parent_loads_when_extensions_not_remote() { + if (!WebExtensionPolicy.useRemoteWebExtensions) { + // Assume that the previous call to pushPrefEnv was from + // allow_unsafe_parent_loads_when_extensions_not_remote. + await SpecialPowers.popPrefEnv(); + } +} + add_task(async function test_webext_tab_subframe_privileges() { function background() { browser.runtime.onMessage.addListener(async ({msg, success, tabId, error}) => { @@ -198,19 +224,25 @@ add_task(async function test_webext_contentscript_iframe_subframe_privileges() { }); add_task(async function test_webext_background_remote_subframe_privileges() { - function backgroundSubframeScript() { + // file_remote_frame.html is opened at the same origin as this test page. + document.cookie = "cookie=monster"; + + function backgroundScript() { window.addEventListener("message", evt => { - browser.test.assertEq("http://mochi.test:8888", evt.origin, "postmessage origin ok"); + browser.test.assertTrue( + evt.origin === "http://mochi.test:8888" || + evt.origin === "https://mochi.test:8888", // using https-first, http2/http3 server. + `postmessage origin ok: ${evt.origin}` + ); browser.test.assertFalse(evt.data.tabs, "remote frame cannot access webextension APIs"); browser.test.assertEq("cookie=monster", evt.data.cookie, "Expected cookie value"); browser.test.notifyPass("webext-background-subframe-privileges"); }, {once: true}); - browser.cookies.set({url: "http://mochi.test:8888", name: "cookie", "value": "monster"}); } let extensionData = { manifest: { - permissions: ["cookies", "*://mochi.test/*", "tabs"], + permissions: ["*://mochi.test/*", "tabs"], background: { page: "background.html", }, @@ -219,32 +251,32 @@ add_task(async function test_webext_background_remote_subframe_privileges() { "background.html": `<!DOCTYPE> <head> <meta charset="utf-8"> - <script src="background-subframe.js"><\/script> + <script src="background.js"><\/script> </head> <body> <iframe src='${SimpleTest.getTestFileURL("file_remote_frame.html")}'></iframe> </body> </html>`, - "background-subframe.js": backgroundSubframeScript, + "background.js": backgroundScript, }, }; // Need remote webextensions to be able to load remote content from a background page. - if (!SpecialPowers.getBoolPref("extensions.webextensions.remote", true)) { - return; - } + await allow_unsafe_parent_loads_when_extensions_not_remote(); let extension = ExtensionTestUtils.loadExtension(extensionData); await extension.startup(); await extension.awaitFinish("webext-background-subframe-privileges"); await extension.unload(); + await revert_allow_unsafe_parent_loads_when_extensions_not_remote(); }); // Test a moz-extension:// iframe inside a content iframe in an extension page. add_task(async function test_sub_subframe_conduit_verified_env() { let manifest = { content_scripts: [{ - matches: ["http://mochi.test/*/file_sample.html"], + // Note: no :8888 because of bug 1468162. + matches: ["*://mochi.test/*/file_sample.html"], all_frames: true, js: ["cs.js"], }], @@ -311,19 +343,20 @@ add_task(async function test_sub_subframe_conduit_verified_env() { is(err, "Unknown sender or wrong actor for recvCreateProxyContext"); } - let remote = SpecialPowers.getBoolPref("extensions.webextensions.remote"); - let badProcess = { message: /Bad {[\w-]+} process: web/ }; let badPrincipal = { message: /Bad {[\w-]+} principal: http/ }; - consoleMonitor.start(remote ? [badPrincipal, badProcess] : [badProcess]); + consoleMonitor.start([badPrincipal, badProcess]); let extension = ExtensionTestUtils.loadExtension({ manifest, files }); + + + // Need OOP to spoof from a web iframe inside background page. + await allow_unsafe_parent_loads_when_extensions_not_remote(); await extension.startup(); - if (remote) { - info("Need OOP to spoof from a web iframe inside background page."); - await expectErrors(extension); - } + info("Spoof from a web iframe inside background page."); + await expectErrors(extension); + await revert_allow_unsafe_parent_loads_when_extensions_not_remote(); info("Try spoofing from the web process."); let win = window.open("./file_sample.html"); |