diff options
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_addons_debug_reload.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_addons_debug_reload.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_addons_debug_reload.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_addons_debug_reload.js new file mode 100644 index 0000000000..d6caca64d6 --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_addons_debug_reload.js @@ -0,0 +1,135 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +/* import-globals-from helper-addons.js */ +Services.scriptloader.loadSubScript(CHROME_URL_ROOT + "helper-addons.js", this); + +// There are shutdown issues for which multiple rejections are left uncaught. +// See bug 1018184 for resolving these issues. +const { PromiseTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/PromiseTestUtils.sys.mjs" +); +PromiseTestUtils.allowMatchingRejectionsGlobally(/File closed/); + +// Avoid test timeouts that can occur while waiting for the "addon-console-works" message. +requestLongerTimeout(2); + +const ADDON_ID = "test-devtools-webextension@mozilla.org"; +const ADDON_NAME = "test-devtools-webextension"; + +const L10N = new LocalizationHelper( + "devtools/client/locales/toolbox.properties" +); + +// Check that addon browsers can be reloaded via the toolbox reload shortcuts +add_task(async function testWebExtensionToolboxReload() { + await enableExtensionDebugging(); + const { document, tab, window } = await openAboutDebugging(); + await selectThisFirefoxPage(document, window.AboutDebugging.store); + + await installTemporaryExtensionFromXPI( + { + background() { + console.log("background script executed " + Math.random()); + }, + id: ADDON_ID, + name: ADDON_NAME, + }, + document + ); + + // Select the debugger right away to avoid any noise coming from the inspector. + await pushPref("devtools.toolbox.selectedTool", "webconsole"); + const { devtoolsDocument, devtoolsWindow } = await openAboutDevtoolsToolbox( + document, + tab, + window, + ADDON_NAME + ); + const toolbox = getToolbox(devtoolsWindow); + + ok( + devtoolsDocument.querySelector(".qa-reload-button"), + "Reload button is visible" + ); + ok( + !devtoolsDocument.querySelector(".qa-back-button"), + "Back button is hidden" + ); + ok( + !devtoolsDocument.querySelector(".qa-forward-button"), + "Forward button is hidden" + ); + ok( + !devtoolsDocument.querySelector(".debug-target-url-form"), + "URL form is hidden" + ); + ok( + devtoolsDocument.getElementById("toolbox-meatball-menu-noautohide"), + "Disable popup autohide button is displayed" + ); + ok( + !devtoolsDocument.getElementById( + "toolbox-meatball-menu-pseudo-locale-accented" + ), + "Accented locale is not displayed (only on browser toolbox)" + ); + + const webconsole = await toolbox.selectTool("webconsole"); + const { hud } = webconsole; + + info("Wait for the initial background message to appear in the console"); + const initialMessage = await waitFor(() => + findMessagesByType(hud, "background script executed", ".console-api") + ); + ok(initialMessage, "Found the expected message from the background script"); + + const waitForLoadedPanelsReload = await watchForLoadedPanelsReload(toolbox); + + info("Reload the addon using a toolbox reload shortcut"); + toolbox.win.focus(); + synthesizeKeyShortcut(L10N.getStr("toolbox.reload.key"), toolbox.win); + + info("Wait until a new background log message is logged"); + const secondMessage = await waitFor(() => { + const newMessage = findMessagesByType( + hud, + "background script executed", + ".console-api" + ); + if (newMessage && newMessage !== initialMessage) { + return newMessage; + } + return false; + }); + + await waitForLoadedPanelsReload(); + + info("Reload via the debug target info bar button"); + clickReload(devtoolsDocument); + + info("Wait until yet another background log message is logged"); + await waitFor(() => { + const newMessage = findMessagesByType( + hud, + "background script executed", + ".console-api" + ); + return ( + newMessage && + newMessage !== initialMessage && + newMessage !== secondMessage + ); + }); + + await waitForLoadedPanelsReload(); + + await closeWebExtAboutDevtoolsToolbox(devtoolsWindow, window); + await removeTemporaryExtension(ADDON_NAME, document); + await removeTab(tab); +}); + +function clickReload(devtoolsDocument) { + devtoolsDocument.querySelector(".qa-reload-button").click(); +} |