Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
const ID = "test_addon@tests.mozilla.org";
const ADDONS = {
test_install1_1: {
name: "Test 1 Addon",
description: "Test 1 addon description",
manifest_version: 2,
version: "1.0",
browser_specific_settings: {
gecko: {
id: ID,
},
},
},
test_install1_2: {
name: "Test 1 Addon",
description: "Test 1 addon description",
manifest_version: 2,
version: "2.0",
browser_specific_settings: {
gecko: {
id: ID,
},
},
},
};
add_task(async function setup() {
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
await promiseStartupManager();
});
// User intentionally reinstalls existing disabled addon of the same version.
// No onInstalling nor onInstalled are fired.
add_task(async function reinstallExistingDisabledAddonSameVersion() {
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onInstalling" }, { event: "onInstalled" }],
},
installEvents: [
{ event: "onNewInstall" },
{ event: "onInstallStarted" },
{ event: "onInstallEnded" },
],
},
async () => {
const xpi = AddonTestUtils.createTempWebExtensionFile({
manifest: ADDONS.test_install1_1,
});
let install = await AddonManager.getInstallForFile(xpi);
await install.install();
}
);
let addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(addon.isActive);
ok(!addon.userDisabled);
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onDisabling" }, { event: "onDisabled" }],
},
},
() => addon.disable()
);
addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(!addon.isActive);
ok(addon.userDisabled);
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onEnabling" }, { event: "onEnabled" }],
},
installEvents: [
{ event: "onNewInstall" },
{ event: "onInstallStarted" },
{ event: "onInstallEnded" },
],
},
async () => {
const xpi2 = AddonTestUtils.createTempWebExtensionFile({
manifest: ADDONS.test_install1_1,
});
let install = await AddonManager.getInstallForFile(xpi2);
await install.install();
}
);
addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(addon.isActive);
ok(!addon.userDisabled);
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onUninstalling" }, { event: "onUninstalled" }],
},
},
() => addon.uninstall()
);
addon = await promiseAddonByID(ID);
equal(addon, null);
await promiseRestartManager();
});
// User intentionally reinstalls existing disabled addon of different version,
// but addon *still should be disabled*.
add_task(async function reinstallExistingDisabledAddonDifferentVersion() {
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onInstalling" }, { event: "onInstalled" }],
},
installEvents: [
{ event: "onNewInstall" },
{ event: "onInstallStarted" },
{ event: "onInstallEnded" },
],
},
async () => {
const xpi = AddonTestUtils.createTempWebExtensionFile({
manifest: ADDONS.test_install1_1,
});
let install = await AddonManager.getInstallForFile(xpi);
await install.install();
}
);
let addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(addon.isActive);
ok(!addon.userDisabled);
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onDisabling" }, { event: "onDisabled" }],
},
},
() => addon.disable()
);
addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(!addon.isActive);
ok(addon.userDisabled);
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onInstalling" }, { event: "onInstalled" }],
},
installEvents: [
{ event: "onNewInstall" },
{ event: "onInstallStarted" },
{ event: "onInstallEnded" },
],
},
async () => {
let xpi2 = AddonTestUtils.createTempWebExtensionFile({
manifest: ADDONS.test_install1_2,
});
let install = await AddonManager.getInstallForFile(xpi2);
await install.install();
}
);
addon = await promiseAddonByID(ID);
notEqual(addon, null);
equal(addon.pendingOperations, AddonManager.PENDING_NONE);
ok(!addon.isActive);
ok(addon.userDisabled);
equal(addon.version, "2.0");
await expectEvents(
{
ignorePlugins: true,
addonEvents: {
[ID]: [{ event: "onUninstalling" }, { event: "onUninstalled" }],
},
},
() => addon.uninstall()
);
addon = await promiseAddonByID(ID);
equal(addon, null);
});