diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/mozapps/extensions/test/xpcshell/test_hidden.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_hidden.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_hidden.js | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_hidden.js b/toolkit/mozapps/extensions/test/xpcshell/test_hidden.js new file mode 100644 index 0000000000..3d1c187b81 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_hidden.js @@ -0,0 +1,251 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +AddonTestUtils.init(this); +AddonTestUtils.usePrivilegedSignatures = id => id.startsWith("privileged"); + +add_task(async function setup() { + await ExtensionTestUtils.startAddonManager(); +}); + +add_task(async function test_hidden() { + let xpi1 = createTempWebExtensionFile({ + manifest: { + browser_specific_settings: { + gecko: { + id: "privileged@tests.mozilla.org", + }, + }, + + name: "Hidden Extension", + hidden: true, + }, + }); + + let xpi2 = createTempWebExtensionFile({ + manifest: { + browser_specific_settings: { + gecko: { + id: "unprivileged@tests.mozilla.org", + }, + }, + + name: "Non-Hidden Extension", + hidden: true, + }, + }); + + await promiseInstallAllFiles([xpi1, xpi2]); + + let [addon1, addon2] = await promiseAddonsByIDs([ + "privileged@tests.mozilla.org", + "unprivileged@tests.mozilla.org", + ]); + + ok(addon1.isPrivileged, "Privileged is privileged"); + ok(addon1.hidden, "Privileged extension should be hidden"); + ok(!addon2.isPrivileged, "Unprivileged extension is not privileged"); + ok(!addon2.hidden, "Unprivileged extension should not be hidden"); + + await promiseRestartManager(); + + [addon1, addon2] = await promiseAddonsByIDs([ + "privileged@tests.mozilla.org", + "unprivileged@tests.mozilla.org", + ]); + + ok(addon1.isPrivileged, "Privileged is privileged"); + ok(addon1.hidden, "Privileged extension should be hidden"); + ok(!addon2.isPrivileged, "Unprivileged extension is not privileged"); + ok(!addon2.hidden, "Unprivileged extension should not be hidden"); + + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "temporary", + manifest: { + browser_specific_settings: { gecko: { id: "privileged@but-temporary" } }, + hidden: true, + }, + }); + await extension.startup(); + let tempAddon = extension.addon; + ok(tempAddon.isPrivileged, "Temporary add-on is privileged"); + ok( + !tempAddon.hidden, + "Temporary add-on is not hidden despite being privileged" + ); + await extension.unload(); +}); + +add_task( + { + pref_set: [["extensions.manifestV3.enabled", true]], + }, + async function test_hidden_and_browser_action_props_are_mutually_exclusive() { + const TEST_CASES = [ + { + title: "hidden and browser_action", + manifest: { + hidden: true, + browser_action: {}, + }, + expectError: true, + }, + { + title: "hidden and page_action", + manifest: { + hidden: true, + page_action: {}, + }, + expectError: true, + }, + { + title: "hidden, browser_action and page_action", + manifest: { + hidden: true, + browser_action: {}, + page_action: {}, + }, + expectError: true, + }, + { + title: "hidden and no browser_action or page_action", + manifest: { + hidden: true, + }, + expectError: false, + }, + { + title: "not hidden and browser_action", + manifest: { + hidden: false, + browser_action: {}, + }, + expectError: false, + }, + { + title: "not hidden and page_action", + manifest: { + hidden: false, + page_action: {}, + }, + expectError: false, + }, + { + title: "no hidden prop and browser_action", + manifest: { + browser_action: {}, + }, + expectError: false, + }, + { + title: "hidden and action", + manifest: { + manifest_version: 3, + hidden: true, + action: {}, + }, + expectError: true, + }, + { + title: "hidden, action and page_action", + manifest: { + manifest_version: 3, + hidden: true, + action: {}, + page_action: {}, + }, + expectError: true, + }, + { + title: "no hidden prop and action", + manifest: { + manifest_version: 3, + action: {}, + }, + expectError: false, + }, + { + title: "no hidden prop and page_action", + manifest: { + page_action: {}, + }, + expectError: false, + }, + { + title: "hidden and action but not privileged", + manifest: { + manifest_version: 3, + hidden: true, + action: {}, + }, + expectError: false, + isPrivileged: false, + }, + { + title: "hidden and browser_action but not privileged", + manifest: { + hidden: true, + browser_action: {}, + }, + expectError: false, + isPrivileged: false, + }, + { + title: "hidden and page_action but not privileged", + manifest: { + hidden: true, + page_action: {}, + }, + expectError: false, + isPrivileged: false, + }, + ]; + + let count = 0; + + for (const { + title, + manifest, + expectError, + isPrivileged = true, + } of TEST_CASES) { + info(`== ${title} ==`); + + // Thunderbird doesn't have page actions. + if (manifest.page_action && AppConstants.MOZ_APP_NAME == "thunderbird") { + continue; + } + + const extension = ExtensionTestUtils.loadExtension({ + manifest: { + browser_specific_settings: { + gecko: { + id: `${isPrivileged ? "" : "not-"}privileged@ext-${count++}`, + }, + }, + permissions: ["mozillaAddons"], + ...manifest, + }, + background() { + /* globals browser */ + browser.test.sendMessage("ok"); + }, + isPrivileged, + }); + + if (expectError) { + await Assert.rejects( + extension.startup(), + /Cannot use browser and\/or page actions in hidden add-ons/, + "expected extension not started" + ); + } else { + await extension.startup(); + await extension.awaitMessage("ok"); + await extension.unload(); + } + } + } +); |