Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
Services.prefs.setBoolPref("extensions.blocklist.enabled", false);
ChromeUtils.defineESModuleGetters(this, {
AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
});
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
AddonTestUtils.createAppInfo(
"xpcshell@tests.mozilla.org",
"XPCShell",
"1",
"43"
);
const TEST_ADDON_ID = "@some-permanent-test-addon";
// Load a permanent extension that eventually unloads the extension immediately
// after add-on startup, to set the stage as a regression test for bug 1575190.
add_task(async function setup_wrapper() {
let extension = ExtensionTestUtils.loadExtension({
useAddonManager: "permanent",
manifest: {
browser_specific_settings: { gecko: { id: TEST_ADDON_ID } },
},
background() {
browser.test.sendMessage("started_up");
},
});
await AddonTestUtils.promiseStartupManager();
await extension.startup();
await extension.awaitBackgroundStarted();
await AddonTestUtils.promiseShutdownManager();
// Check message because it is expected to be received while `startup()` was
// pending resolution.
info("Awaiting expected started_up message 1");
await extension.awaitMessage("started_up");
// Load AddonManager, and unload the extension as soon as it has started.
await AddonTestUtils.promiseStartupManager();
await extension.awaitBackgroundStarted();
await extension.unload();
await AddonTestUtils.promiseShutdownManager();
// Confirm that the extension has started when promiseStartupManager returned.
info("Awaiting expected started_up message 2");
await extension.awaitMessage("started_up");
});
// Check that the add-on from the previous test has indeed been uninstalled.
add_task(async function restart_addon_manager_after_extension_unload() {
await AddonTestUtils.promiseStartupManager();
let addon = await AddonManager.getAddonByID(TEST_ADDON_ID);
equal(addon, null, "Test add-on should have been removed");
await AddonTestUtils.promiseShutdownManager();
});