Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"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();
});