<!DOCTYPE HTML> <html> <head> <title>Example with a service worker</title> <script src="../testharness.js"></script> <script src="../testharnessreport.js"></script> </head> <body> <h1>Service Worker Tests</h1> <p>Demonstrates running <tt>testharness</tt> based tests inside a service worker. <p>The test harness should time out due to one of the tests inside the worker timing out. <p>This test assumes that the browser supports <a href="http://www.w3.org/TR/service-workers/">ServiceWorkers</a>. <div id="log"></div> <script> test( function(t) { assert_true("serviceWorker" in navigator, "navigator.serviceWorker exists"); }, "Browser supports ServiceWorker"); promise_test( function() { // Since the service worker registration could be in an indeterminate // state (due to, for example, a previous test run failing), we start by // unregstering our service worker and then registering it again. var scope = "/service-worker-scope"; var worker_url = "apisample-worker.js"; return navigator.serviceWorker.register(worker_url, {scope: scope}) .then( function(registration) { return registration.unregister(); }) .then( function() { return navigator.serviceWorker.register(worker_url, {scope: scope}); }) .then( function(registration) { add_completion_callback( function() { registration.unregister(); }); return new Promise( function(resolve) { registration.addEventListener("updatefound", function() { resolve(registration.installing); }); }); }) .then( function(worker) { fetch_tests_from_worker(worker); }); }, "Register ServiceWorker"); </script> </body>