diff options
Diffstat (limited to 'devtools/shared/webconsole/test/test_console_serviceworker_cached.html')
-rw-r--r-- | devtools/shared/webconsole/test/test_console_serviceworker_cached.html | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/devtools/shared/webconsole/test/test_console_serviceworker_cached.html b/devtools/shared/webconsole/test/test_console_serviceworker_cached.html new file mode 100644 index 000000000..5aab64d7f --- /dev/null +++ b/devtools/shared/webconsole/test/test_console_serviceworker_cached.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML> +<html lang="en"> +<head> + <meta charset="utf8"> + <title>Test for getCachedMessages and Service Workers</title> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript;version=1.8" src="common.js"></script> + <!-- Any copyright is dedicated to the Public Domain. + - http://creativecommons.org/publicdomain/zero/1.0/ --> +</head> +<body> +<p>Test for getCachedMessages and Service Workers</p> + +<script class="testbody" type="text/javascript;version=1.8"> +SimpleTest.waitForExplicitFinish(); + +let BASE_URL = "https://example.com/chrome/devtools/shared/webconsole/test/"; +let SERVICE_WORKER_URL = BASE_URL + "helper_serviceworker.js"; +let FRAME_URL = BASE_URL + "sandboxed_iframe.html"; + +let firstTabExpectedCalls = [ + { + level: "log", + filename: /helper_serviceworker/, + arguments: ['script evaluation'], + }, + { + level: "log", + filename: /helper_serviceworker/, + arguments: ['install event'], + }, + { + level: "log", + filename: /helper_serviceworker/, + arguments: ['activate event'], + }, +]; + +let secondTabExpectedCalls = [ + { + level: "log", + filename: /helper_serviceworker/, + arguments: ['fetch event: ' + FRAME_URL], + } +]; + +let startTest = Task.async(function*() { + removeEventListener("load", startTest); + + yield new Promise(resolve => { + SpecialPowers.pushPrefEnv({"set": [ + ["dom.serviceWorkers.enabled", true], + ["devtools.webconsole.filter.serviceworkers", true] + ]}, resolve); + }); + + info("Adding a tab and attaching a service worker"); + let tab1 = yield addTab(FRAME_URL); + let swr = yield withActiveServiceWorker(tab1.linkedBrowser.contentWindow, + SERVICE_WORKER_URL); + + yield new Promise(resolve => { + info("Attaching console to tab 1"); + attachConsoleToTab(["ConsoleAPI"], function(state) { + state.client.getCachedMessages(["ConsoleAPI"], function(calls) { + checkConsoleAPICalls(calls.messages, firstTabExpectedCalls); + closeDebugger(state, resolve); + }); + }); + }); + + // Because this tab is being added after the original messages happened, + // they shouldn't show up in a call to getCachedMessages. + // However, there is a fetch event which is logged due to loading the tab. + info("Adding a new tab at the same URL"); + let tab2 = yield addTab(FRAME_URL); + yield new Promise(resolve => { + info("Attaching console to tab 2"); + attachConsoleToTab(["ConsoleAPI"], function(state) { + state.client.getCachedMessages(["ConsoleAPI"], function(calls) { + checkConsoleAPICalls(calls.messages, secondTabExpectedCalls); + closeDebugger(state, resolve); + }); + }); + }); + + yield swr.unregister(); + + SimpleTest.finish(); +}); +addEventListener("load", startTest); + +// This test needs to add tabs that are controlled by a service worker +// so use some special powers to dig around and find gBrowser +let {gBrowser} = SpecialPowers._getTopChromeWindow(SpecialPowers.window.get()); + +SimpleTest.registerCleanupFunction(() => { + while (gBrowser.tabs.length > 1) { + gBrowser.removeCurrentTab(); + } +}); + +function addTab(url) { + info("Adding a new tab with URL: '" + url + "'"); + return new Promise(resolve => { + let tab = gBrowser.selectedTab = gBrowser.addTab(url); + gBrowser.selectedBrowser.addEventListener("load", function onload() { + gBrowser.selectedBrowser.removeEventListener("load", onload, true); + info("URL '" + url + "' loading complete"); + resolve(tab); + }, true); + }); +} + +</script> +</body> +</html> |