summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js b/browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js
new file mode 100644
index 0000000000..317f9c4321
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_menus_events_after_context_destroy.js
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+// This test does verify that the menus API events are still emitted when
+// there are extension context alive with subscribed listeners
+// (See Bug 1602384).
+add_task(async function test_subscribed_events_fired_after_context_destroy() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["menus"],
+ },
+ files: {
+ "page.html": `<!DOCTYPE html>
+ <meta charset="utf-8"><script src="page.js"></script>
+ Extension Page
+ `,
+ "page.js": async function () {
+ browser.menus.onShown.addListener(() => {
+ browser.test.sendMessage("menu-onShown");
+ });
+ browser.menus.onHidden.addListener(() => {
+ browser.test.sendMessage("menu-onHidden");
+ });
+ // Call an API method implemented in the parent process
+ // to ensure the menu listeners are subscribed in the
+ // parent process.
+ await browser.runtime.getBrowserInfo();
+ browser.test.sendMessage("page-loaded");
+ },
+ },
+ });
+
+ await extension.startup();
+ const pageURL = `moz-extension://${extension.uuid}/page.html`;
+
+ info("Loading extension page in a tab");
+ const tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, pageURL);
+ await extension.awaitMessage("page-loaded");
+
+ info("Loading extension page in another tab");
+ const tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, pageURL);
+ await extension.awaitMessage("page-loaded");
+
+ info("Remove the first tab");
+ BrowserTestUtils.removeTab(tab1);
+
+ info("Open a context menu and expect menu.onShown to be fired");
+ await openContextMenu("body");
+
+ await extension.awaitMessage("menu-onShown");
+
+ info("Close context menu and expect menu.onHidden to be fired");
+ await closeExtensionContextMenu();
+ await extension.awaitMessage("menu-onHidden");
+
+ ok(true, "The expected menu events have been fired");
+
+ BrowserTestUtils.removeTab(tab2);
+
+ await extension.unload();
+});