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_builtin_location.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 '')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_builtin_location.js | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_builtin_location.js b/toolkit/mozapps/extensions/test/xpcshell/test_builtin_location.js new file mode 100644 index 0000000000..30801e9f72 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_builtin_location.js @@ -0,0 +1,149 @@ +"use strict"; + +/* globals browser */ +let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION; +Services.prefs.setIntPref("extensions.enabledScopes", scopes); + +AddonTestUtils.createAppInfo( + "xpcshell@tests.mozilla.org", + "XPCShell", + "1", + "1" +); + +async function getWrapper(id, hidden) { + let wrapper = await installBuiltinExtension({ + manifest: { + browser_specific_settings: { gecko: { id } }, + hidden, + }, + background() { + browser.test.sendMessage("started"); + }, + }); + await wrapper.awaitMessage("started"); + return wrapper; +} + +// Tests installing an extension from the built-in location. +add_task(async function test_builtin_location() { + let id = "builtin@tests.mozilla.org"; + await AddonTestUtils.promiseStartupManager(); + let wrapper = await getWrapper(id); + + let addon = await promiseAddonByID(id); + notEqual(addon, null, "Addon is installed"); + ok(addon.isActive, "Addon is active"); + ok(addon.isPrivileged, "Addon is privileged"); + ok(wrapper.extension.isAppProvided, "Addon is app provided"); + ok(!addon.hidden, "Addon is not hidden"); + + // Built-in extensions are not checked against the blocklist, + // so we shouldn't have loaded it. + ok(!Services.blocklist.isLoaded, "Blocklist hasn't been loaded"); + + // After a restart, the extension should start up normally. + await promiseRestartManager(); + await wrapper.awaitStartup(); + await wrapper.awaitMessage("started"); + ok(true, "Extension in built-in location ran after restart"); + + addon = await promiseAddonByID(id); + notEqual(addon, null, "Addon is installed"); + ok(addon.isActive, "Addon is active"); + + // After a restart that causes a database rebuild, it should still work + await promiseRestartManager("2"); + await wrapper.awaitStartup(); + await wrapper.awaitMessage("started"); + ok(true, "Extension in built-in location ran after restart"); + + addon = await promiseAddonByID(id); + notEqual(addon, null, "Addon is installed"); + ok(addon.isActive, "Addon is active"); + + // After a restart that changes the schema version, it should still work + await promiseShutdownManager(); + Services.prefs.setIntPref("extensions.databaseSchema", 0); + await promiseStartupManager(); + + await wrapper.awaitStartup(); + await wrapper.awaitMessage("started"); + ok(true, "Extension in built-in location ran after restart"); + + addon = await promiseAddonByID(id); + notEqual(addon, null, "Addon is installed"); + ok(addon.isActive, "Addon is active"); + + await wrapper.unload(); + + addon = await promiseAddonByID(id); + equal(addon, null, "Addon is gone after uninstall"); + await AddonTestUtils.promiseShutdownManager(); +}); + +// Tests installing a hidden extension from the built-in location. +add_task(async function test_builtin_location_hidden() { + let id = "hidden@tests.mozilla.org"; + await AddonTestUtils.promiseStartupManager(); + let wrapper = await getWrapper(id, true); + + let addon = await promiseAddonByID(id); + notEqual(addon, null, "Addon is installed"); + ok(addon.isActive, "Addon is active"); + ok(addon.isPrivileged, "Addon is privileged"); + ok(wrapper.extension.isAppProvided, "Addon is app provided"); + ok(addon.hidden, "Addon is hidden"); + + await wrapper.unload(); + await AddonTestUtils.promiseShutdownManager(); +}); + +// Tests updates to builtin extensions +add_task(async function test_builtin_update() { + let id = "bleah@tests.mozilla.org"; + await AddonTestUtils.promiseStartupManager(); + + let wrapper = await installBuiltinExtension({ + manifest: { + browser_specific_settings: { gecko: { id } }, + version: "1.0", + }, + background() { + browser.test.sendMessage("started"); + }, + }); + await wrapper.awaitMessage("started"); + + await AddonTestUtils.promiseShutdownManager(); + + // Change the built-in + await setupBuiltinExtension({ + manifest: { + browser_specific_settings: { gecko: { id } }, + version: "2.0", + }, + background() { + browser.test.sendMessage("started"); + }, + }); + + let updateReason; + AddonTestUtils.on("bootstrap-method", (method, params, reason) => { + updateReason = reason; + }); + + // Re-start, with a new app version + await AddonTestUtils.promiseStartupManager("3"); + + await wrapper.awaitMessage("started"); + + equal( + updateReason, + BOOTSTRAP_REASONS.ADODN_UPGRADE, + "Builtin addon's bootstrap update() method was called at startup" + ); + + await wrapper.unload(); + await AddonTestUtils.promiseShutdownManager(); +}); |