From a90a5cba08fdf6c0ceb95101c275108a152a3aed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 07:35:37 +0200 Subject: Merging upstream version 127.0. Signed-off-by: Daniel Baumann --- .../browser_ext_themes_getCurrent_differentExt.js | 4 +- .../test/browser/browser_ext_themes_sidebars.js | 8 +- .../test/marionette/manifest-serviceworker.toml | 1 + .../test/mochitest/mochitest-common.toml | 10 +- .../extensions/test/mochitest/test_ext_all_apis.js | 2 + .../test_ext_contentscript_activeTab.html | 5 +- .../mochitest/test_ext_extension_getViews.html | 108 +++++++++++++ .../mochitest/test_ext_runtime_getContexts.html | 126 +++++++++++++++ ...test_ext_scripting_executeScript_activeTab.html | 5 +- .../mochitest/test_ext_subframes_privileges.html | 67 ++++++-- .../test/xpcshell/test_ext_contentscript_errors.js | 32 +++- .../test_ext_contentscript_permissions_change.js | 1 + .../test/xpcshell/test_ext_cookieBehaviors.js | 118 ++++++++++++-- .../test/xpcshell/test_ext_dnr_dynamic_rules.js | 33 +++- .../xpcshell/test_ext_dnr_regexFilter_limits.js | 44 ++--- .../test/xpcshell/test_ext_dnr_session_rules.js | 33 ++++ .../test/xpcshell/test_ext_dnr_static_rules.js | 22 +-- .../test/xpcshell/test_ext_downloads_urlencoded.js | 2 +- .../test/xpcshell/test_ext_manifest_incognito.js | 39 ++++- .../test/xpcshell/test_ext_permission_warnings.js | 2 +- .../test/xpcshell/test_ext_permissions.js | 144 ++++++++++++----- .../test/xpcshell/test_ext_runtime_getContexts.js | 180 +++++++++++++++++++++ .../xpcshell/test_ext_service_worker_messaging.js | 128 +++++++++++++++ .../test/xpcshell/test_ext_storage_telemetry.js | 45 ++---- .../test_ext_webRequest_eventPage_StreamFilter.js | 6 +- .../extensions/test/xpcshell/xpcshell-common.toml | 2 + .../test/xpcshell/xpcshell-serviceworker.toml | 2 + 27 files changed, 1003 insertions(+), 166 deletions(-) create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_runtime_getContexts.js create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js (limited to 'toolkit/components/extensions/test') diff --git a/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js b/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js index 587c5d4efe..86d794669d 100644 --- a/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js +++ b/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js @@ -139,7 +139,9 @@ add_task(async function test_getcurrent_privateBrowsing() { "resource://gre/modules/ExtensionCommon.sys.mjs" ); const { makeWidgetId } = ExtensionCommon; - privateWin.SidebarUI.show(`${makeWidgetId(extension.id)}-sidebar-action`); + privateWin.SidebarController.show( + `${makeWidgetId(extension.id)}-sidebar-action` + ); let imageLoaded = extension.awaitMessage("theme-image"); Assert.deepEqual(await imageLoaded, { success: true }, "theme image loaded"); diff --git a/toolkit/components/extensions/test/browser/browser_ext_themes_sidebars.js b/toolkit/components/extensions/test/browser/browser_ext_themes_sidebars.js index 0d2e69716d..492fe3a263 100644 --- a/toolkit/components/extensions/test/browser/browser_ext_themes_sidebars.js +++ b/toolkit/components/extensions/test/browser/browser_ext_themes_sidebars.js @@ -17,7 +17,7 @@ async function test_sidebar_theme(theme, isBrightText) { const sidebarBox = document.getElementById("sidebar-box"); const browserRoot = document.documentElement; - const content = SidebarUI.browser.contentWindow; + const content = SidebarController.browser.contentWindow; const root = content.document.documentElement; ok( @@ -184,7 +184,7 @@ add_task(async function test_support_sidebar_colors() { for (let command of ["viewBookmarksSidebar", "viewHistorySidebar"]) { info("Executing command: " + command); - await SidebarUI.show(command); + await SidebarController.show(command); await test_sidebar_theme( { @@ -263,7 +263,7 @@ add_task(async function test_support_sidebar_border_color() { "Sidebar splitter should be colored properly" ); - SidebarUI.reversePosition(); + SidebarController.reversePosition(); is( sidebarSplitterCS.borderInlineStartColor, @@ -271,7 +271,7 @@ add_task(async function test_support_sidebar_border_color() { "Sidebar splitter should be colored properly after switching sides" ); - SidebarUI.reversePosition(); + SidebarController.reversePosition(); } await extension.unload(); diff --git a/toolkit/components/extensions/test/marionette/manifest-serviceworker.toml b/toolkit/components/extensions/test/marionette/manifest-serviceworker.toml index c8035f80c2..04bdc4e17e 100644 --- a/toolkit/components/extensions/test/marionette/manifest-serviceworker.toml +++ b/toolkit/components/extensions/test/marionette/manifest-serviceworker.toml @@ -1,4 +1,5 @@ [DEFAULT] +skip-if = ["!nightly_build"] # MOZ_WEBEXT_WEBIDL_ENABLED is only defined on nightly ["test_extension_serviceworkers_purged_on_pref_disabled.py"] ["test_temporary_extension_serviceworkers_not_persisted.py"] 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 @@ + + + + extension.getViews Test + + + + + + + + + + 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 @@ + + + + runtime.getContexts Test + + + + + + + + + + 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": ` - ', + "page.js"() { + browser.runtime.onMessage.addListener((msg, sender) => { + browser.test.assertEq( + "hello-from-sw", + msg, + "expected message from service worker" + ); + + const { contextId, ...otherProps } = sender; + browser.test.assertTrue(!!contextId, "expected a truthy contextId"); + browser.test.assertDeepEq( + { + envType: "addon_child", + id: "@test-messaging", + origin: self.origin, + url: browser.runtime.getURL("sw.js"), + }, + otherProps, + "expected correct sender props" + ); + + browser.test.sendMessage("page-done"); + }); + + browser.test.sendMessage("page-ready"); + }, + }, + }); + + await extension.startup(); + await extension.awaitMessage("background-ready"); + + const page = await ExtensionTestUtils.loadContentPage( + `moz-extension://${extension.uuid}/page.html`, + { extension } + ); + await extension.awaitMessage("page-ready"); + + extension.sendMessage("send"); + await extension.awaitMessage("page-done"); + + await page.close(); + await extension.unload(); +}); + +add_task(async function test_runtime_connect() { + const extension = ExtensionTestUtils.loadExtension({ + manifest: { + background: { + service_worker: "sw.js", + }, + browser_specific_settings: { + gecko: { id: "@test-messaging" }, + }, + }, + files: { + "sw.js": async function () { + browser.test.onMessage.addListener(msg => { + browser.test.assertEq("connect", msg, "expected correct message"); + browser.runtime.connect(); + }); + + browser.test.sendMessage("background-ready"); + }, + "page.html": '', + "page.js"() { + browser.runtime.onConnect.addListener(port => { + const { contextId, ...otherProps } = port.sender; + browser.test.assertTrue(!!contextId, "expected a truthy contextId"); + browser.test.assertDeepEq( + { + envType: "addon_child", + id: "@test-messaging", + origin: self.origin, + url: browser.runtime.getURL("sw.js"), + }, + otherProps, + "expected correct sender props" + ); + + browser.test.sendMessage("page-done"); + }); + + browser.test.sendMessage("page-ready"); + }, + }, + }); + + await extension.startup(); + await extension.awaitMessage("background-ready"); + + const page = await ExtensionTestUtils.loadContentPage( + `moz-extension://${extension.uuid}/page.html`, + { extension } + ); + await extension.awaitMessage("page-ready"); + + extension.sendMessage("connect"); + await extension.awaitMessage("page-done"); + + await page.close(); + await extension.unload(); +}); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_storage_telemetry.js b/toolkit/components/extensions/test/xpcshell/test_ext_storage_telemetry.js index d0448b7b2e..4b98597b11 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_storage_telemetry.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_storage_telemetry.js @@ -15,55 +15,42 @@ const { TelemetryTestUtils } = ChromeUtils.importESModule( "resource://testing-common/TelemetryTestUtils.sys.mjs" ); -const HISTOGRAM_JSON_IDS = [ - "WEBEXT_STORAGE_LOCAL_SET_MS", - "WEBEXT_STORAGE_LOCAL_GET_MS", -]; -const KEYED_HISTOGRAM_JSON_IDS = [ - "WEBEXT_STORAGE_LOCAL_SET_MS_BY_ADDONID", - "WEBEXT_STORAGE_LOCAL_GET_MS_BY_ADDONID", -]; - -const HISTOGRAM_IDB_IDS = [ +const HISTOGRAM_IDS = [ "WEBEXT_STORAGE_LOCAL_IDB_SET_MS", "WEBEXT_STORAGE_LOCAL_IDB_GET_MS", ]; -const KEYED_HISTOGRAM_IDB_IDS = [ +const KEYED_HISTOGRAM_IDS = [ "WEBEXT_STORAGE_LOCAL_IDB_SET_MS_BY_ADDONID", "WEBEXT_STORAGE_LOCAL_IDB_GET_MS_BY_ADDONID", ]; -const HISTOGRAM_IDS = [].concat(HISTOGRAM_JSON_IDS, HISTOGRAM_IDB_IDS); -const KEYED_HISTOGRAM_IDS = [].concat( - KEYED_HISTOGRAM_JSON_IDS, - KEYED_HISTOGRAM_IDB_IDS -); - const EXTENSION_ID1 = "@test-extension1"; const EXTENSION_ID2 = "@test-extension2"; async function test_telemetry_background() { const { GleanTimingDistribution } = globalThis; + + // NOTE: we do not collect telemetry for the legacy JSON backend anymore + // and so if the IDB backend is not enabled we expect the related telemetry + // histograms and timing distributions to be empty. const expectedEmptyGleanMetrics = ExtensionStorageIDB.isBackendEnabled - ? ["storageLocalGetJson", "storageLocalSetJson"] + ? [] : ["storageLocalGetIdb", "storageLocalSetIdb"]; const expectedNonEmptyGleanMetrics = ExtensionStorageIDB.isBackendEnabled ? ["storageLocalGetIdb", "storageLocalSetIdb"] - : ["storageLocalGetJson", "storageLocalSetJson"]; - + : []; const expectedEmptyHistograms = ExtensionStorageIDB.isBackendEnabled - ? HISTOGRAM_JSON_IDS - : HISTOGRAM_IDB_IDS; + ? [] + : HISTOGRAM_IDS; const expectedEmptyKeyedHistograms = ExtensionStorageIDB.isBackendEnabled - ? KEYED_HISTOGRAM_JSON_IDS - : KEYED_HISTOGRAM_IDB_IDS; - + ? [] + : KEYED_HISTOGRAM_IDS; const expectedNonEmptyHistograms = ExtensionStorageIDB.isBackendEnabled - ? HISTOGRAM_IDB_IDS - : HISTOGRAM_JSON_IDS; + ? HISTOGRAM_IDS + : []; const expectedNonEmptyKeyedHistograms = ExtensionStorageIDB.isBackendEnabled - ? KEYED_HISTOGRAM_IDB_IDS - : KEYED_HISTOGRAM_JSON_IDS; + ? KEYED_HISTOGRAM_IDS + : []; const server = createHttpServer(); server.registerDirectory("/data/", do_get_file("data")); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_eventPage_StreamFilter.js b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_eventPage_StreamFilter.js index 23c29aa155..820e04956e 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_eventPage_StreamFilter.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_eventPage_StreamFilter.js @@ -105,7 +105,11 @@ async function test_idletimeout_on_streamfilter({ ).catch(err => { // This request is expected to be aborted when cleared after the test is exiting, // otherwise rethrow the error to trigger an explicit failure. - if (/The operation was aborted/.test(err.message)) { + if ( + /Content-Length header of network response exceeds response Body/.test( + err.message + ) + ) { info(`Test webRequest fetching "${testURL}" aborted`); } else { ok( diff --git a/toolkit/components/extensions/test/xpcshell/xpcshell-common.toml b/toolkit/components/extensions/test/xpcshell/xpcshell-common.toml index 6d47012eca..fd0b2d50d2 100644 --- a/toolkit/components/extensions/test/xpcshell/xpcshell-common.toml +++ b/toolkit/components/extensions/test/xpcshell/xpcshell-common.toml @@ -432,6 +432,8 @@ skip-if = ["os == 'android' && debug"] ["test_ext_runtime_getBrowserInfo.js"] +["test_ext_runtime_getContexts.js"] + ["test_ext_runtime_getPlatformInfo.js"] ["test_ext_runtime_id.js"] diff --git a/toolkit/components/extensions/test/xpcshell/xpcshell-serviceworker.toml b/toolkit/components/extensions/test/xpcshell/xpcshell-serviceworker.toml index b300959970..83ca99bc2f 100644 --- a/toolkit/components/extensions/test/xpcshell/xpcshell-serviceworker.toml +++ b/toolkit/components/extensions/test/xpcshell/xpcshell-serviceworker.toml @@ -49,3 +49,5 @@ run-sequentially = "very high failure rate in parallel" ["test_ext_scripting_contentScripts_file.js"] ["test_ext_scripting_updateContentScripts.js"] + +["test_ext_service_worker_messaging.js"] -- cgit v1.2.3