Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<?xml version="1.0"?>
<!--
Any copyright is dedicated to the Public Domain.
-->
<window title="Test for ServiceWorkerManager"
onload="test();">
<script type="application/javascript" src="chrome_helpers.js"/>
<script type="application/javascript">
<![CDATA[
let IFRAME_URL = EXAMPLE_URL + "serviceworkermanager_iframe.html";
function test() {
SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({'set': [
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.testing.enabled", true],
]}, function () {
(async function() {
let registrations = swm.getAllRegistrations();
is(registrations.length, 0);
let iframe = $("iframe");
let promise = waitForIframeLoad(iframe);
iframe.src = IFRAME_URL;
await promise;
info("Check that the service worker manager notifies its listeners " +
"when a service worker is registered.");
promise = waitForRegister(EXAMPLE_URL);
iframe.contentWindow.postMessage("register", "*");
let registration = await promise;
registrations = swm.getAllRegistrations();
is(registrations.length, 1);
is(registrations.queryElementAt(0, Ci.nsIServiceWorkerRegistrationInfo),
registration);
info("Check that the service worker manager does not notify its " +
"listeners when a service worker is registered with the same " +
"scope as an existing registration.");
let listener = {
onRegister () {
ok(false, "Listener should not have been notified.");
}
};
swm.addListener(listener);
iframe.contentWindow.postMessage("register", "*");
info("Check that the service worker manager notifies its listeners " +
"when a service worker is unregistered.");
promise = waitForUnregister(EXAMPLE_URL);
iframe.contentWindow.postMessage("unregister", "*");
registration = await promise;
swm.removeListener(listener);
registrations = swm.getAllRegistrations();
is(registrations.length, 0);
SimpleTest.finish();
})();
});
}
]]>
</script>
<p id="display"></p>
<div id="content" style="display:none;"></div>
<pre id="test"></pre>
<iframe id="iframe"></iframe>
</body>
<label id="test-result"/>
</window>