diff options
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_start.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_start.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_start.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_start.js new file mode 100644 index 0000000000..483a1cad43 --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_start.js @@ -0,0 +1,71 @@ +/* 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 +); + +const SW_TAB_URL = URL_ROOT_SSL + "resources/service-workers/empty-sw.html"; +const SW_URL = URL_ROOT_SSL + "resources/service-workers/empty-sw.js"; + +/** + * Test that service workers can be started using about:debugging. + */ +add_task(async function () { + await enableServiceWorkerDebugging(); + + // Setting a low idle_timeout and idle_extended_timeout will allow the service worker + // to reach the STOPPED state quickly, which will allow us to test the start button. + // The default value is 30000 milliseconds. + info("Set a low service worker idle timeout"); + await pushPref("dom.serviceWorkers.idle_timeout", 1000); + await pushPref("dom.serviceWorkers.idle_extended_timeout", 1000); + + 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("Wait until the service worker stops"); + const targetElement = await waitForServiceWorkerStopped(SW_URL, document); + + // Retrieve the Start button for the worker. + const startButton = targetElement.querySelector(".qa-start-button"); + ok(startButton, "Found its start button"); + + info( + "Click on the start button and wait for the service worker to be running" + ); + const onServiceWorkerRunning = waitForServiceWorkerRunning(SW_URL, document); + startButton.click(); + const updatedTarget = await onServiceWorkerRunning; + + // Check that the buttons are displayed as expected. + const hasInspectButton = updatedTarget.querySelector( + ".qa-debug-target-inspect-button" + ); + const hasStartButton = updatedTarget.querySelector(".qa-start-button"); + ok(hasInspectButton, "Service worker has an inspect button"); + ok(!hasStartButton, "Service worker does not have a start button"); + + 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); +}); |