diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js b/toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js new file mode 100644 index 0000000000..9fbff4efe1 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_ext_management.js @@ -0,0 +1,223 @@ +"use strict"; + +add_task(async function setup() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "48", "48"); + await promiseStartupManager(); +}); + +/* eslint-disable no-undef */ +// Shared background function for getSelf tests +function backgroundGetSelf() { + browser.management.getSelf().then( + extInfo => { + let url = browser.runtime.getURL("*"); + extInfo.hostPermissions = extInfo.hostPermissions.filter(i => i != url); + + // Internal permissions are currently part of the permissions included + // in the management.getSelf results, and in non release channels + // any temporary installed extension is recognized as privileged + // and some internal permission would be added automatically. + // + // TODO(Bug 1713344): this may become unnecessary if we filter out + // the internal permissions from the management API results. + extInfo.permissions = extInfo.permissions.filter( + i => !i.startsWith("internal:") + ); + + extInfo.url = browser.runtime.getURL(""); + browser.test.sendMessage("management-getSelf", extInfo); + }, + error => { + browser.test.notifyFail(`getSelf rejected with error: ${error}`); + } + ); +} +/* eslint-enable no-undef */ + +add_task(async function test_management_get_self_complete() { + const id = "get_self_test_complete@tests.mozilla.com"; + const permissions = ["management", "cookies"]; + const hostPermissions = ["*://example.org/*", "https://foo.example.org/*"]; + + let manifest = { + browser_specific_settings: { + gecko: { + id, + update_url: "https://updates.mozilla.com/", + }, + }, + name: "test extension name", + short_name: "test extension short name", + description: "test extension description", + version: "1.0", + homepage_url: "http://www.example.com/", + options_ui: { + page: "get_self_options.html", + }, + icons: { + 16: "icons/icon-16.png", + 48: "icons/icon-48.png", + }, + permissions: [...permissions, ...hostPermissions], + }; + + let extension = ExtensionTestUtils.loadExtension({ + manifest, + background: backgroundGetSelf, + useAddonManager: "temporary", + }); + await extension.startup(); + let extInfo = await extension.awaitMessage("management-getSelf"); + + equal(extInfo.id, id, "getSelf returned the expected id"); + equal( + extInfo.installType, + "development", + "getSelf returned the expected installType" + ); + for (let prop of ["name", "description", "version"]) { + equal( + extInfo[prop], + manifest[prop], + `getSelf returned the expected ${prop}` + ); + } + equal( + extInfo.shortName, + manifest.short_name, + "getSelf returned the expected shortName" + ); + equal( + extInfo.mayDisable, + true, + "getSelf returned the expected value for mayDisable" + ); + equal( + extInfo.enabled, + true, + "getSelf returned the expected value for enabled" + ); + equal( + extInfo.homepageUrl, + manifest.homepage_url, + "getSelf returned the expected homepageUrl" + ); + equal( + extInfo.updateUrl, + manifest.browser_specific_settings.gecko.update_url, + "getSelf returned the expected updateUrl" + ); + ok( + extInfo.optionsUrl.endsWith(manifest.options_ui.page), + "getSelf returned the expected optionsUrl" + ); + for (let [index, size] of Object.keys(manifest.icons).sort().entries()) { + let iconUrl = `${extInfo.url}${manifest.icons[size]}`; + equal( + extInfo.icons[index].size, + +size, + "getSelf returned the expected icon size" + ); + equal( + extInfo.icons[index].url, + iconUrl, + "getSelf returned the expected icon url" + ); + } + deepEqual( + extInfo.permissions.sort(), + permissions.sort(), + "getSelf returned the expected permissions" + ); + deepEqual( + extInfo.hostPermissions.sort(), + hostPermissions.sort(), + "getSelf returned the expected hostPermissions" + ); + equal( + extInfo.installType, + "development", + "getSelf returned the expected installType" + ); + await extension.unload(); +}); + +add_task(async function test_management_get_self_minimal() { + const id = "get_self_test_minimal@tests.mozilla.com"; + + let manifest = { + browser_specific_settings: { + gecko: { + id, + }, + }, + name: "test extension name", + version: "1.0", + }; + + let extension = ExtensionTestUtils.loadExtension({ + manifest, + background: backgroundGetSelf, + useAddonManager: "temporary", + }); + await extension.startup(); + let extInfo = await extension.awaitMessage("management-getSelf"); + + equal(extInfo.id, id, "getSelf returned the expected id"); + equal( + extInfo.installType, + "development", + "getSelf returned the expected installType" + ); + for (let prop of ["name", "version"]) { + equal( + extInfo[prop], + manifest[prop], + `getSelf returned the expected ${prop}` + ); + } + for (let prop of ["shortName", "description", "optionsUrl"]) { + equal(extInfo[prop], "", `getSelf returned the expected ${prop}`); + } + for (let prop of ["homepageUrl", " updateUrl", "icons"]) { + equal( + Reflect.getOwnPropertyDescriptor(extInfo, prop), + undefined, + `getSelf did not return a ${prop} property` + ); + } + for (let prop of ["permissions", "hostPermissions"]) { + deepEqual(extInfo[prop], [], `getSelf returned the expected ${prop}`); + } + await extension.unload(); +}); + +add_task(async function test_management_get_self_permanent() { + const id = "get_self_test_permanent@tests.mozilla.com"; + + let manifest = { + browser_specific_settings: { + gecko: { + id, + }, + }, + name: "test extension name", + version: "1.0", + }; + + let extension = ExtensionTestUtils.loadExtension({ + manifest, + background: backgroundGetSelf, + useAddonManager: "permanent", + }); + await extension.startup(); + let extInfo = await extension.awaitMessage("management-getSelf"); + + equal(extInfo.id, id, "getSelf returned the expected id"); + equal( + extInfo.installType, + "normal", + "getSelf returned the expected installType" + ); + await extension.unload(); +}); |