diff options
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_service-worker-status.js')
-rw-r--r-- | devtools/client/netmonitor/test/browser_net_service-worker-status.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_service-worker-status.js b/devtools/client/netmonitor/test/browser_net_service-worker-status.js new file mode 100644 index 000000000..d7ada1645 --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_service-worker-status.js @@ -0,0 +1,87 @@ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +/** + * Tests if requests intercepted by service workers have the correct status code + */ + +// Service workers only work on https +const URL = EXAMPLE_URL.replace("http:", "https:"); + +const TEST_URL = URL + "service-workers/status-codes.html"; + +add_task(function* () { + yield new Promise(done => { + let options = { "set": [ + // Accept workers from mochitest's http. + ["dom.serviceWorkers.enabled", true], + ["dom.serviceWorkers.openWindow.enabled", true], + ["dom.serviceWorkers.testing.enabled", true], + ]}; + SpecialPowers.pushPrefEnv(options, done); + }); + + let { tab, monitor } = yield initNetMonitor(TEST_URL, null, true); + info("Starting test... "); + + let { NetMonitorView } = monitor.panelWin; + let { RequestsMenu } = NetMonitorView; + + const REQUEST_DATA = [ + { + method: "GET", + uri: URL + "service-workers/test/200", + details: { + status: 200, + statusText: "OK (service worker)", + displayedStatus: "service worker", + type: "plain", + fullMimeType: "text/plain; charset=UTF-8" + }, + stackFunctions: ["doXHR", "performRequests"] + }, + ]; + + info("Registering the service worker..."); + yield ContentTask.spawn(tab.linkedBrowser, {}, function* () { + yield content.wrappedJSObject.registerServiceWorker(); + }); + + info("Performing requests..."); + let wait = waitForNetworkEvents(monitor, REQUEST_DATA.length); + yield ContentTask.spawn(tab.linkedBrowser, {}, function* () { + content.wrappedJSObject.performRequests(); + }); + yield wait; + + let index = 0; + for (let request of REQUEST_DATA) { + let item = RequestsMenu.getItemAtIndex(index); + + info(`Verifying request #${index}`); + yield verifyRequestItemTarget(item, request.method, request.uri, request.details); + + let { stacktrace } = item.attachment.cause; + let stackLen = stacktrace ? stacktrace.length : 0; + + ok(stacktrace, `Request #${index} has a stacktrace`); + ok(stackLen >= request.stackFunctions.length, + `Request #${index} has a stacktrace with enough (${stackLen}) items`); + + request.stackFunctions.forEach((functionName, j) => { + is(stacktrace[j].functionName, functionName, + `Request #${index} has the correct function at position #${j} on the stack`); + }); + + index++; + } + + info("Unregistering the service worker..."); + yield ContentTask.spawn(tab.linkedBrowser, {}, function* () { + yield content.wrappedJSObject.unregisterServiceWorker(); + }); + + yield teardown(monitor); +}); |