gecko-dev/dom/workers/test/serviceworkers/test_bug1408734.html

66 lines
1.9 KiB
HTML

<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
<head>
<title>Bug 1408734</title>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/SpawnTask.js"></script>
<script src="error_reporting_helpers.js"></script>
<script src="utils.js"></script>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
<script class="testbody" type="text/javascript">
// setup prefs
add_task(() => {
return SpecialPowers.pushPrefEnv({"set": [
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.testing.enabled", true],
]});
});
// test for bug 1408734
add_task(async () => {
// register a service worker
let registration = await navigator.serviceWorker.register("fetch.js", {scope: "./"});
let sw = registration.installing || registration.active;
// wait for service worker be activated
await waitForState(sw, 'activated');
// wait for control changed
sw.postMessage('claim');
await waitForControlled(window);
// get the ServiceWorkerRegistration we just register through GetRegistration
registration = await navigator.serviceWorker.getRegistration("./");
ok(registration, "should get the registration under scope './'");
// call unregister()
await registration.unregister();
// access registration.updateViaCache to trigger the bug
// we really care that we don't crash. In the future we will fix
// updateViaCache to be accessible after unregister().
try {
if (registration.updateViaCache) {
ok(false,
"Expected InvalidStateError when accessing registration.updateViaCache after unregister()");
}
} catch (err) {
is(err.name, "InvalidStateError", "Expected InvalidStateError.");
}
});
</script>
</pre>
</body>
</html>