diff options
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_console.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_console.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_console.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_console.js new file mode 100644 index 0000000000..742791668d --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_console.js @@ -0,0 +1,131 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* import-globals-from helper-serviceworker.js */ +Services.scriptloader.loadSubScript( + CHROME_URL_ROOT + "helper-serviceworker.js", + this +); + +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/debugger/test/mochitest/shared-head.js", + this +); + +const SW_TAB_URL = + URL_ROOT_SSL + "resources/service-workers/controlled-sw.html"; +const SW_URL = URL_ROOT_SSL + "resources/service-workers/controlled-sw.js"; + +/** + * Test various simple debugging operation against service workers debugged through about:debugging. + */ +add_task(async function () { + await enableServiceWorkerDebugging(); + + const { document, tab, window } = await openAboutDebugging({ + enableWorkerUpdates: true, + }); + await selectThisFirefoxPage(document, window.AboutDebugging.store); + + // Open a tab that registers a basic service worker. + const swTab = await addTab(SW_TAB_URL); + + // Wait for the registration to make sure service worker has been started, and that we + // are not just reading STOPPED as the initial state. + await waitForRegistration(swTab); + + info("Open a toolbox to debug the worker"); + const { devtoolsTab, devtoolsWindow } = await openAboutDevtoolsToolbox( + document, + tab, + window, + SW_URL + ); + + const toolbox = getToolbox(devtoolsWindow); + + info("Assert the default tools displayed in worker toolboxes"); + const toolTabs = toolbox.doc.querySelectorAll(".devtools-tab"); + const activeTools = [...toolTabs].map(toolTab => + toolTab.getAttribute("data-id") + ); + + is( + activeTools.join(","), + "webconsole,jsdebugger", + "Correct set of tools supported by worker" + ); + + const webconsole = await toolbox.selectTool("webconsole"); + const { hud } = webconsole; + + info("Evaluate location in the console"); + await executeAndWaitForMessage(hud, "this.location.toString()", SW_URL); + ok(true, "Got the location logged in the console"); + + info( + "Evaluate Date and RegExp to ensure their formater also work from worker threads" + ); + await executeAndWaitForMessage( + hud, + "new Date(2013, 3, 1)", + "Mon Apr 01 2013 00:00:00" + ); + ok(true, "Date object has expected text content"); + await executeAndWaitForMessage(hud, "new RegExp('.*')", "/.*/"); + ok(true, "RegExp has expected text content"); + + await toolbox.selectTool("jsdebugger"); + const dbg = createDebuggerContext(toolbox); + const { + selectors: { getIsWaitingOnBreak, getCurrentThread }, + } = dbg; + + info("Wait for next interupt in the worker thread"); + await clickElement(dbg, "pause"); + await waitForState(dbg, state => getIsWaitingOnBreak(getCurrentThread())); + + info("Trigger some code in the worker and wait for pause"); + await SpecialPowers.spawn(swTab.linkedBrowser, [], async function () { + content.wrappedJSObject.installServiceWorker(); + }); + await waitForPaused(dbg); + ok(true, "successfully paused"); + + info( + "Evaluate some variable only visible if we execute in the breakpoint frame" + ); + await executeAndWaitForMessage(hud, "event.data", "install-service-worker"); + + info("Resume execution"); + await resume(dbg); + + info("Test pausing from console evaluation"); + hud.ui.wrapper.dispatchEvaluateExpression("debugger; 42"); + await waitForPaused(dbg); + ok(true, "successfully paused"); + info("Immediately resume"); + await resume(dbg); + await waitFor(() => findMessagesByType(hud, "42", ".result")); + ok("The paused console evaluation resumed and logged its magic number"); + + info("Destroy the toolbox"); + await closeAboutDevtoolsToolbox(document, devtoolsTab, window); + + info("Unregister service worker"); + await unregisterServiceWorker(swTab); + + info("Wait until the service worker disappears from about:debugging"); + await waitUntil(() => !findDebugTargetByText(SW_URL, document)); + + info("Remove tabs"); + await removeTab(swTab); + await removeTab(tab); +}); + +async function executeAndWaitForMessage(hud, evaluationString, expectedResult) { + hud.ui.wrapper.dispatchEvaluateExpression(); + await waitFor(() => findMessagesByType(hud, expectedResult, ".result")); +} |