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_incognito.js | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_menus_incognito.js (limited to 'browser/components/extensions/test/browser/browser_ext_menus_incognito.js') diff --git a/browser/components/extensions/test/browser/browser_ext_menus_incognito.js b/browser/components/extensions/test/browser/browser_ext_menus_incognito.js new file mode 100644 index 0000000000..397b140ab6 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_menus_incognito.js @@ -0,0 +1,155 @@ +"use strict"; + +// Make sure that we won't trigger events for a private window. +add_task(async function test_no_show_hide_for_private_window() { + function background() { + let events = []; + browser.menus.onShown.addListener(data => events.push(data)); + browser.menus.onHidden.addListener(() => events.push("onHidden")); + browser.test.onMessage.addListener(async (name, data) => { + if (name == "check-events") { + browser.test.sendMessage("events", events); + events = []; + } + if (name == "create-menu") { + let id = await new Promise(resolve => { + let mid = browser.menus.create(data, () => resolve(mid)); + }); + browser.test.sendMessage("menu-id", id); + } + }); + } + + let pb_extension = ExtensionTestUtils.loadExtension({ + background, + manifest: { + browser_specific_settings: { + gecko: { id: "@private-allowed" }, + }, + permissions: ["menus", "tabs"], + }, + incognitoOverride: "spanning", + }); + + let extension = ExtensionTestUtils.loadExtension({ + background, + manifest: { + browser_specific_settings: { + gecko: { id: "@not-allowed" }, + }, + permissions: ["menus", "tabs"], + }, + }); + + async function testEvents(ext, expected) { + ext.sendMessage("check-events"); + let events = await ext.awaitMessage("events"); + Assert.deepEqual( + expected, + events, + `expected events received for ${ext.id}.` + ); + } + + await pb_extension.startup(); + await extension.startup(); + + extension.sendMessage("create-menu", { + title: "not_allowed", + contexts: ["all", "tools_menu"], + }); + let id1 = await extension.awaitMessage("menu-id"); + let extMenuId = `${makeWidgetId(extension.id)}-menuitem-${id1}`; + pb_extension.sendMessage("create-menu", { + title: "spanning_allowed", + contexts: ["all", "tools_menu"], + }); + let id2 = await pb_extension.awaitMessage("menu-id"); + let pb_extMenuId = `${makeWidgetId(pb_extension.id)}-menuitem-${id2}`; + + // Expected menu events + let baseShownEvent = { + contexts: ["page", "all"], + viewType: "tab", + frameId: 0, + editable: false, + }; + let publicShown = { menuIds: [id1], ...baseShownEvent }; + let privateShown = { menuIds: [id2], ...baseShownEvent }; + + baseShownEvent = { + contexts: ["tools_menu"], + viewType: undefined, + editable: false, + }; + let toolsShown = { menuIds: [id1], ...baseShownEvent }; + let privateToolsShown = { menuIds: [id2], ...baseShownEvent }; + + // Run tests in non-private window + + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:robots" + ); + + // Open and close a menu on the public window. + await openContextMenu("body"); + + // We naturally expect both extensions here. + ok(document.getElementById(extMenuId), `menu exists ${extMenuId}`); + ok(document.getElementById(pb_extMenuId), `menu exists ${pb_extMenuId}`); + await closeContextMenu(); + + await testEvents(extension, [publicShown, "onHidden"]); + await testEvents(pb_extension, [privateShown, "onHidden"]); + + await openToolsMenu(); + ok(document.getElementById(extMenuId), `menu exists ${extMenuId}`); + ok(document.getElementById(pb_extMenuId), `menu exists ${pb_extMenuId}`); + await closeToolsMenu(); + + await testEvents(extension, [toolsShown, "onHidden"]); + await testEvents(pb_extension, [privateToolsShown, "onHidden"]); + + // Run tests on private window + + let privateWindow = await BrowserTestUtils.openNewBrowserWindow({ + private: true, + }); + + // Open and close a menu on the private window. + let menu = await openContextMenu("body div", privateWindow); + // We should not see the "not_allowed" extension here. + ok( + !privateWindow.document.getElementById(extMenuId), + `menu does not exist ${extMenuId} in private window` + ); + ok( + privateWindow.document.getElementById(pb_extMenuId), + `menu exists ${pb_extMenuId} in private window` + ); + await closeContextMenu(menu); + + await testEvents(extension, []); + await testEvents(pb_extension, [privateShown, "onHidden"]); + + await openToolsMenu(privateWindow); + // We should not see the "not_allowed" extension here. + ok( + !privateWindow.document.getElementById(extMenuId), + `menu does not exist ${extMenuId} in private window` + ); + ok( + privateWindow.document.getElementById(pb_extMenuId), + `menu exists ${pb_extMenuId} in private window` + ); + await closeToolsMenu(undefined, privateWindow); + + await testEvents(extension, []); + await testEvents(pb_extension, [privateToolsShown, "onHidden"]); + + await extension.unload(); + await pb_extension.unload(); + BrowserTestUtils.removeTab(tab); + await BrowserTestUtils.closeWindow(privateWindow); +}); -- cgit v1.2.3