<!DOCTYPE html> <html> <title>Service Workers: navigator.serviceWorker</title> <head> <link rel="help" href="https://w3c.github.io/ServiceWorker/#navigator-service-worker"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src=/resources/WebIDLParser.js></script> <script src=/resources/idlharness.js></script> </head> <body> <!-- The `serviceWorker` attribute of the [Navigator][1] interface must return an instance of the `ServiceWorkerContainer` interface, which provides access to registration, removal, upgrade, and communication with Service Workers that are (or will become) active for the current document. Communication with these workers is provided via standard [HTML5 messaging APIs][2], and [messaging occurs as per usual with Web Workers][3]. --> <script type=text/plain id="idl_0"> partial interface Navigator { readonly attribute ServiceWorkerContainer serviceWorker; }; interface ServiceWorkerContainer : EventTarget { [Unforgeable] readonly attribute ServiceWorker? installing; [Unforgeable] readonly attribute ServiceWorker? waiting; [Unforgeable] readonly attribute ServiceWorker? active; [Unforgeable] readonly attribute ServiceWorker? controller; readonly attribute Promise<ServiceWorker> ready; Promise<sequence<ServiceWorker>?> getAll(); Promise<ServiceWorker> register(DOMString url, optional RegistrationOptionList options); Promise<any> unregister(DOMString? scope); // events attribute EventHandler onupdatefound; attribute EventHandler oncontrollerchange; attribute EventHandler onreloadpage; attribute EventHandler onerror; }; dictionary RegistrationOptionList { DOMString scope = "/*"; }; interface ReloadPageEvent : Event { void waitUntil(Promise<any> f); }; </script> <!-- [1]: http://goo.gl/I7WAhg [2]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html [3]: http://www.w3.org/TR/workers/#dom-worker-postmessage --> <script type=text/plain id="untested_idls"> interface ServiceWorker {}; interface EventHandler {}; interface EventTarget {}; interface Event {}; </pre> <script> var idl_array = new IdlArray(); idl_array.add_untested_idls(document.getElementById("untested_idls").textContent); idl_array.add_idls(document.getElementById("idl_0").textContent); idl_array.add_objects({ Navigator: ["throw new Error ('No object defined for the Navigator interface')"], ServiceWorkerContainer: ["throw new Error ('No object defined for the ServiceWorkerContainer interface')"], RegistrationOptionList: ["throw new Error ('No object defined for the RegistrationOptionList dictionary')"], ReloadPageEvent: ["throw new Error ('No object defined for the ReloadPageEvent interface')"] }); idl_array.test(); </script> </body> </html>