<!-- Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ --> <!DOCTYPE HTML> <html> <head> <title>Bug 1130684 - Test service worker clients.claim oninstall</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <div id="content" style="display: none"></div> <pre id="test"></pre> <script class="testbody" type="text/javascript"> var registration; function register() { return navigator.serviceWorker.register("claim_oninstall_worker.js", { scope: "./" }) .then((swr) => registration = swr); } function unregister() { return registration.unregister().then(function(result) { ok(result, "Unregister should return true."); }); } function testClaim() { ok(registration.installing, "Worker should be in installing state"); navigator.serviceWorker.oncontrollerchange = function() { ok(false, "Claim should not succeed when the worker is not active."); } var p = new Promise(function(res, rej) { var worker = registration.installing; worker.onstatechange = function(e) { if (worker.state === 'installed') { is(worker, registration.waiting, "Worker should be in waiting state"); } else if (worker.state === 'activated') { // The worker will become active only if claim will reject inside the // install handler. is(worker, registration.active, "Claim should reject if the worker is not active"); ok(navigator.serviceWorker.controller === null, "Client is not controlled."); e.target.onstatechange = null; res(); } } }); return p; } function runTest() { register() .then(testClaim) .then(unregister) .catch(function(e) { ok(false, "Some test failed with error " + e); }).then(SimpleTest.finish); } SimpleTest.waitForExplicitFinish(); SpecialPowers.pushPrefEnv({"set": [ ["dom.serviceWorkers.exemptFromPerDomainMax", true], ["dom.serviceWorkers.enabled", true], ["dom.serviceWorkers.testing.enabled", true] ]}, runTest); </script> </pre> </body> </html>