| <!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> |