94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
|
|
|
|
add_task(async function () {
|
|
let triggered = {};
|
|
const { Management } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/Extension.sys.mjs"
|
|
);
|
|
for (let event of ["install", "uninstall", "update"]) {
|
|
triggered[event] = false;
|
|
Management.on(event, () => (triggered[event] = true));
|
|
}
|
|
|
|
async function expectEvents(expected, fn) {
|
|
let events = Object.keys(expected);
|
|
for (let event of events) {
|
|
triggered[event] = false;
|
|
}
|
|
|
|
await fn();
|
|
await new Promise(executeSoon);
|
|
|
|
for (let event of events) {
|
|
equal(
|
|
triggered[event],
|
|
expected[event],
|
|
`Event ${event} was${expected[event] ? "" : " not"} triggered`
|
|
);
|
|
}
|
|
}
|
|
|
|
await promiseStartupManager();
|
|
|
|
const id = "webextension@tests.mozilla.org";
|
|
|
|
// Install version 1.0, shouldn't see any events
|
|
await expectEvents({ update: false, uninstall: false }, async () => {
|
|
await promiseInstallWebExtension({
|
|
manifest: {
|
|
version: "1.0",
|
|
browser_specific_settings: { gecko: { id } },
|
|
},
|
|
});
|
|
});
|
|
|
|
// Install version 2.0, we should get an update event but not an uninstall
|
|
await expectEvents({ update: true, uninstall: false }, async () => {
|
|
await promiseInstallWebExtension({
|
|
manifest: {
|
|
version: "2.0",
|
|
browser_specific_settings: { gecko: { id } },
|
|
},
|
|
});
|
|
});
|
|
|
|
// Install version 3.0 as a temporary addon, we should again get
|
|
// update but not uninstall
|
|
let v3 = createTempWebExtensionFile({
|
|
manifest: {
|
|
version: "3.0",
|
|
browser_specific_settings: { gecko: { id } },
|
|
},
|
|
});
|
|
|
|
await expectEvents({ update: true, uninstall: false }, () =>
|
|
AddonManager.installTemporaryAddon(v3)
|
|
);
|
|
|
|
// Uninstall the temporary addon, this causes version 2.0 still installed
|
|
// in the profile to be revealed. Again, this results in an update event.
|
|
let addon = await promiseAddonByID(id);
|
|
await expectEvents({ update: true, uninstall: false }, () =>
|
|
addon.uninstall()
|
|
);
|
|
|
|
// Re-install version 3.0 as a temporary addon
|
|
await AddonManager.installTemporaryAddon(v3);
|
|
|
|
// Now shut down the addons manager, this should cause the temporary
|
|
// addon to be uninstalled which reveals 2.0 from the profile.
|
|
await expectEvents({ update: true, uninstall: false }, () =>
|
|
promiseShutdownManager()
|
|
);
|
|
|
|
// When we start up again we should not see any events
|
|
await expectEvents({ install: false }, () => promiseStartupManager());
|
|
|
|
addon = await promiseAddonByID(id);
|
|
|
|
// When we uninstall from the profile, the addon is now gone, we should
|
|
// get an uninstall events.
|
|
await expectEvents({ update: false, uninstall: true }, () =>
|
|
addon.uninstall()
|
|
);
|
|
});
|