// META: global=window,worker // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js // META: script=cache-storage/resources/test-helpers.js // META: script=service-worker/resources/test-helpers.sub.js // META: timeout=long // https://w3c.github.io/ServiceWorker idl_test( ['service-workers'], ['dom', 'html'], async (idl_array, t) => { self.cacheInstance = await create_temporary_cache(t); idl_array.add_objects({ CacheStorage: ['caches'], Cache: ['self.cacheInstance'], ServiceWorkerContainer: ['navigator.serviceWorker'] }); // TODO: Add ServiceWorker and ServiceWorkerRegistration instances for the // other worker scopes. if (self.GLOBAL.isWindow()) { idl_array.add_objects({ ServiceWorkerRegistration: ['registrationInstance'], ServiceWorker: ['registrationInstance.installing'] }); const scope = 'service-worker/resources/scope/idlharness'; const registration = await service_worker_unregister_and_register( t, 'service-worker/resources/empty-worker.js', scope); t.add_cleanup(() => registration.unregister()); self.registrationInstance = registration; } else if (self.ServiceWorkerGlobalScope) { // self.ServiceWorkerGlobalScope should only be defined for the // ServiceWorker scope, which allows us to detect and test the interfaces // exposed only for ServiceWorker. idl_array.add_objects({ Clients: ['clients'], ExtendableEvent: ['new ExtendableEvent("type")'], FetchEvent: ['new FetchEvent("type", { request: new Request("") })'], ServiceWorkerGlobalScope: ['self'], ServiceWorkerRegistration: ['registration'], ServiceWorker: ['serviceWorker'], // TODO: Test instances of Client and WindowClient, e.g. // Client: ['self.clientInstance'], // WindowClient: ['self.windowClientInstance'] }); } } );