diff options
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js new file mode 100644 index 0000000000..eb8f233d12 --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js @@ -0,0 +1,102 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* import-globals-from helper-collapsibilities.js */ +Services.scriptloader.loadSubScript( + CHROME_URL_ROOT + "helper-collapsibilities.js", + this +); + +/** + * Test context menu on about:devtools-toolbox page. + */ +add_task(async function () { + info("Force all debug target panes to be expanded"); + prepareCollapsibilitiesTest(); + + const { document, tab, window } = await openAboutDebugging(); + await selectThisFirefoxPage(document, window.AboutDebugging.store); + const { devtoolsBrowser, devtoolsTab } = await openAboutDevtoolsToolbox( + document, + tab, + window + ); + + info("Check whether the menu item which opens devtools is disabled"); + const rootDocument = devtoolsTab.ownerDocument; + await assertContextMenu( + rootDocument, + devtoolsBrowser, + ".debug-target-info", + false + ); + + info("Force to select about:debugging page"); + await updateSelectedTab(gBrowser, tab, window.AboutDebugging.store); + + info("Check whether the menu item which opens devtools is enabled"); + await assertContextMenu(rootDocument, devtoolsBrowser, "#mount", true); + + await closeAboutDevtoolsToolbox(document, devtoolsTab, window); + await removeTab(tab); +}); + +async function assertContextMenu( + rootDocument, + browser, + targetSelector, + shouldBeEnabled +) { + if (shouldBeEnabled) { + await assertContextMenuEnabled(rootDocument, browser, targetSelector); + } else { + await assertContextMenuDisabled(rootDocument, browser, targetSelector); + } +} + +async function assertContextMenuDisabled( + rootDocument, + browser, + targetSelector +) { + const contextMenu = rootDocument.getElementById("contentAreaContextMenu"); + let isPopupShown = false; + const listener = () => { + isPopupShown = true; + }; + contextMenu.addEventListener("popupshown", listener); + BrowserTestUtils.synthesizeMouseAtCenter( + targetSelector, + { type: "contextmenu" }, + browser + ); + await wait(1000); + ok(!isPopupShown, `Context menu should not be shown`); + contextMenu.removeEventListener("popupshown", listener); +} + +async function assertContextMenuEnabled(rootDocument, browser, targetSelector) { + // Show content context menu. + const contextMenu = rootDocument.getElementById("contentAreaContextMenu"); + const popupShownPromise = BrowserTestUtils.waitForEvent( + contextMenu, + "popupshown" + ); + BrowserTestUtils.synthesizeMouseAtCenter( + targetSelector, + { type: "contextmenu" }, + browser + ); + await popupShownPromise; + ok(true, `Context menu should be shown`); + + // Hide content context menu. + const popupHiddenPromise = BrowserTestUtils.waitForEvent( + contextMenu, + "popuphidden" + ); + contextMenu.hidePopup(); + await popupHiddenPromise; +} |