"use strict"; const { SearchService } = ChromeUtils.importESModule( "moz-src:///toolkit/components/search/SearchService.sys.mjs" ); let contextMenu; let LOGIN_FILL_ITEMS = ["---", null, "manage-saved-logins", true]; let NAVIGATION_ITEMS = AppConstants.platform == "macosx" ? [ "context-back", false, "context-forward", false, "context-reload", true, "---", null, "context-bookmarkpage", true, ] : [ "context-navigation", null, [ "context-back", false, "context-forward", false, "context-reload", true, "context-bookmarkpage", true, ], null, "---", null, ]; const askChatMenu = [ "context-ask-chat", true, // Need a blank entry here because the Ask Chat submenu is dynamically built with no ids. "", null, ]; let hasStripOnShare = Services.prefs.getBoolPref( "privacy.query_stripping.strip_on_share.enabled" ); let hasContainers = Services.prefs.getBoolPref("privacy.userContext.enabled") && ContextualIdentityService.getPublicIdentities().length; let hasSplitViews = Services.prefs.getBoolPref( "browser.tabs.splitView.enabled", false ); const hasSelectTranslations = Services.prefs.getBoolPref("browser.translations.enable") && Services.prefs.getBoolPref("browser.translations.select.enable"); const example_base = // eslint-disable-next-line @microsoft/sdl/no-insecure-url "http://example.com/browser/browser/base/content/test/contextMenu/"; const about_preferences_base = "about:preferences"; const chrome_base = "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/"; const head_base = "chrome://mochitests/content/browser/browser/base/content/test/contextMenu/"; /* import-globals-from contextmenu_common.js */ Services.scriptloader.loadSubScript( chrome_base + "contextmenu_common.js", this ); function getThisFrameSubMenu(base_menu) { if (AppConstants.NIGHTLY_BUILD) { let osPidItem = ["context-frameOsPid", false]; base_menu = base_menu.concat(osPidItem); } return base_menu; } add_setup(async function () { await SpecialPowers.pushPrefEnv({ set: [ ["test.wait300msAfterTabSwitch", true], ["browser.search.separatePrivateDefault.ui.enabled", true], ], }); }); // Below are test cases for XUL element add_task(async function test_xul_text_link_label() { let url = chrome_base + "subtst_contextmenu_xul.xhtml"; await BrowserTestUtils.openNewForegroundTab({ gBrowser, url, waitForLoad: true, waitForStateStop: true, }); await test_contextmenu( "#test-xul-text-link-label", [ "context-openlinkintab", true, ...(hasSplitViews ? ["context-openlinkinsplitview", true] : []), ...(hasContainers ? ["context-openlinkinusercontext-menu", true] : []), // We need a blank entry here because the containers submenu is // dynamically generated with no ids. ...(hasContainers ? ["", null] : []), "context-openlink", true, "context-openlinkprivate", true, "context-previewlink", true, "---", null, "context-bookmarklink", true, "context-savelink", true, "context-copylink", true, ...(hasStripOnShare ? ["context-stripOnShareLink", false] : []), "---", null, "context-searchselect", true, "context-searchselect-private", true, ...askChatMenu, ], { awaitOnMenuBuilt: { id: "context-ask-chat", }, } ); // Clean up so won't affect HTML element test cases. lastElementSelector = null; gBrowser.removeCurrentTab(); }); // Below are test cases for HTML element. add_task(async function test_setup_html() { let url = example_base + "subtst_contextmenu.html"; await BrowserTestUtils.openNewForegroundTab(gBrowser, url); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () { let doc = content.document; let audioIframe = doc.querySelector("#test-audio-in-iframe"); // media documents always use a