summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_menus_event_order.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_menus_event_order.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_menus_event_order.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_menus_event_order.js b/browser/components/extensions/test/browser/browser_ext_menus_event_order.js
new file mode 100644
index 0000000000..4ec43c8cde
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_menus_event_order.js
@@ -0,0 +1,87 @@
+/* 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";
+
+const PAGE =
+ "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html";
+add_task(async function test_menus_click_event_sequence() {
+ async function background() {
+ let events = [];
+
+ browser.menus.onShown.addListener(() => {
+ events.push("onShown");
+ });
+ browser.menus.onHidden.addListener(() => {
+ events.push("onHidden");
+ browser.test.sendMessage("event_sequence", events);
+ events.length = 0;
+ });
+
+ browser.menus.create({
+ title: "item in page menu",
+ contexts: ["page"],
+ onclick() {
+ events.push("onclick parameter of page menu item");
+ },
+ });
+ browser.menus.create(
+ {
+ title: "item in tools menu",
+ contexts: ["tools_menu"],
+ onclick() {
+ events.push("onclick parameter of tools_menu menu item");
+ },
+ },
+ () => {
+ // The menus creation requests are expected to be handled in-order.
+ // So when the callback for the last menu creation request is called,
+ // we can assume that all menus have been registered.
+ browser.test.sendMessage("created menus");
+ }
+ );
+ }
+
+ const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, PAGE);
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background,
+ manifest: {
+ permissions: ["menus"],
+ },
+ });
+ await extension.startup();
+ info("Waiting for events and menu items to be registered");
+ await extension.awaitMessage("created menus");
+
+ async function verifyResults(menuType) {
+ info("Getting menu event info...");
+ let events = await extension.awaitMessage("event_sequence");
+ Assert.deepEqual(
+ events,
+ ["onShown", `onclick parameter of ${menuType} menu item`, "onHidden"],
+ "Expected order of menus events"
+ );
+ }
+
+ {
+ info("Opening and closing page menu");
+ const menu = await openContextMenu("body");
+ const menuitem = menu.querySelector("menuitem[label='item in page menu']");
+ ok(menuitem, "Page menu item should exist");
+ await closeExtensionContextMenu(menuitem);
+ await verifyResults("page");
+ }
+
+ {
+ info("Opening and closing tools menu");
+ const menu = await openToolsMenu();
+ let menuitem = menu.querySelector("menuitem[label='item in tools menu']");
+ ok(menuitem, "Tools menu item should exist");
+ await closeToolsMenu(menuitem);
+ await verifyResults("tools_menu");
+ }
+
+ await extension.unload();
+ BrowserTestUtils.removeTab(tab);
+});