summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js b/toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js
new file mode 100644
index 0000000000..b4b1b87ee5
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_test_wrapper.js
@@ -0,0 +1,60 @@
+"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();
+});