From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser/browser_ext_menus_event_order.js | 87 ++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_menus_event_order.js (limited to 'browser/components/extensions/test/browser/browser_ext_menus_event_order.js') 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); +}); -- cgit v1.2.3