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_action_popup_allowed_urls.js | 283 +++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_action_popup_allowed_urls.js (limited to 'browser/components/extensions/test/browser/browser_ext_action_popup_allowed_urls.js') diff --git a/browser/components/extensions/test/browser/browser_ext_action_popup_allowed_urls.js b/browser/components/extensions/test/browser/browser_ext_action_popup_allowed_urls.js new file mode 100644 index 0000000000..8a985161ce --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_action_popup_allowed_urls.js @@ -0,0 +1,283 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +add_setup(async () => { + await SpecialPowers.pushPrefEnv({ + set: [["extensions.manifestV3.enabled", true]], + }); +}); + +add_task(async function test_actions_setPopup_allowed_urls() { + const otherExtension = ExtensionTestUtils.loadExtension({}); + const extensionDefinition = { + background() { + browser.test.onMessage.addListener(async (msg, ...args) => { + if (msg === "set-popup") { + const apiNs = args[0]; + const popupOptions = args[1]; + if (apiNs === "pageAction") { + popupOptions.tabId = ( + await browser.tabs.query({ active: true }) + )[0].id; + } + + let error; + try { + await browser[apiNs].setPopup(popupOptions); + } catch (err) { + error = err; + } + browser.test.sendMessage("set-popup:done", { + error: error && String(error), + }); + return; + } + + browser.test.fail(`Unexpected test message: ${msg}`); + }); + }, + }; + + await otherExtension.startup(); + + const testCases = [ + // https urls are disallowed on mv3 but currently allowed on mv2. + [ + "action", + "https://example.com", + { + manifest_version: 3, + action: {}, + }, + { + disallowed: true, + errorMessage: "Access denied for URL https://example.com", + }, + ], + + [ + "pageAction", + "https://example.com", + { + manifest_version: 3, + page_action: {}, + }, + { + disallowed: true, + errorMessage: "Access denied for URL https://example.com", + }, + ], + + [ + "browserAction", + "https://example.com", + { + manifest_version: 2, + browser_action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "pageAction", + "https://example.com", + { + manifest_version: 2, + page_action: {}, + }, + { + disallowed: false, + }, + ], + + // absolute moz-extension url from same extension expected to be allowed in MV3 and MV2. + + [ + "action", + extension => `moz-extension://${extension.uuid}/page.html`, + { + manifest_version: 3, + action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "browserAction", + extension => `moz-extension://${extension.uuid}/page.html`, + { + manifest_version: 2, + browser_action: { default_popup: "popup.html" }, + }, + { + disallowed: false, + }, + ], + + [ + "pageAction", + extension => `moz-extension://${extension.uuid}/page.html`, + { + manifest_version: 3, + page_action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "pageAction", + extension => `moz-extension://${extension.uuid}/page.html`, + { + manifest_version: 2, + page_action: {}, + }, + { + disallowed: false, + }, + ], + + // absolute moz-extension url from other extensions expected to be disallowed in MV3 and MV2. + + [ + "action", + `moz-extension://${otherExtension.uuid}/page.html`, + { + manifest_version: 3, + action: {}, + }, + { + disallowed: true, + errorMessage: `Access denied for URL moz-extension://${otherExtension.uuid}/page.html`, + }, + ], + + [ + "browserAction", + `moz-extension://${otherExtension.uuid}/page.html`, + { + manifest_version: 2, + browser_action: {}, + }, + { + disallowed: true, + errorMessage: `Access denied for URL moz-extension://${otherExtension.uuid}/page.html`, + }, + ], + + [ + "pageAction", + `moz-extension://${otherExtension.uuid}/page.html`, + { + manifest_version: 3, + page_action: {}, + }, + { + disallowed: true, + errorMessage: `Access denied for URL moz-extension://${otherExtension.uuid}/page.html`, + }, + ], + + [ + "pageAction", + `moz-extension://${otherExtension.uuid}/page.html`, + { + manifest_version: 2, + page_action: {}, + }, + { + disallowed: true, + errorMessage: `Access denied for URL moz-extension://${otherExtension.uuid}/page.html`, + }, + ], + + // Empty url should also be allowed (as it resets the popup url currently set). + [ + "action", + null, + { + manifest_version: 3, + action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "browserAction", + null, + { + manifest_version: 2, + browser_action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "pageAction", + null, + { + manifest_version: 3, + page_action: {}, + }, + { + disallowed: false, + }, + ], + + [ + "pageAction", + null, + { + manifest_version: 2, + page_action: {}, + }, + { + disallowed: false, + }, + ], + ]; + + for (const [apiNs, popupUrl, manifest, expects] of testCases) { + const extension = ExtensionTestUtils.loadExtension({ + ...extensionDefinition, + manifest, + }); + await extension.startup(); + + const popup = + typeof popupUrl === "function" ? popupUrl(extension) : popupUrl; + + info( + `Testing ${apiNs}.setPopup({ popup: ${popup} }) on manifest_version ${ + manifest.manifest_version ?? 2 + }` + ); + + const popupOptions = { popup }; + extension.sendMessage("set-popup", apiNs, popupOptions); + + const { error } = await extension.awaitMessage("set-popup:done"); + if (expects.disallowed) { + ok( + error?.includes(expects.errorMessage), + `Got expected error on url ${popup}: ${error}` + ); + } else { + is(error, undefined, `Expected url ${popup} to be allowed`); + } + await extension.unload(); + } + + await otherExtension.unload(); +}); -- cgit v1.2.3