blob: ac79ddc005688affe9acc67b83f43ef304f81c81 [file] [log] [blame]
'use strict';
importScripts('worker-testharness.js');
importScripts('/resources/WebIDLParser.js');
importScripts('/resources/idlharness.js');
promise_test(async (t) => {
const srcs = ['dom', 'html', 'service-workers'];
const [dom, html, serviceWorkerIdl] = await Promise.all(
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
var idlArray = new IdlArray();
idlArray.add_idls(serviceWorkerIdl, { only: [
'ServiceWorkerGlobalScope',
'Client',
'WindowClient',
'Clients',
'ServiceWorker',
'ServiceWorkerState',
'ServiceWorkerUpdateViaCache',
'ServiceWorkerRegistration',
'EventTarget',
'NavigationPreloadManager',
'Cache',
'CacheStorage',
]});
idlArray.add_dependency_idls(dom);
idlArray.add_dependency_idls(html);
idlArray.add_objects({
ServiceWorkerGlobalScope: ['self'],
Clients: ['self.clients'],
ServiceWorkerRegistration: ['self.registration'],
CacheStorage: ['self.caches']
// TODO: Test instances of Client and WindowClient, e.g.
// Client: ['self.clientInstance'],
// WindowClient: ['self.windowClientInstance']
});
return create_temporary_cache(t)
.then(function(cache) {
self.cacheInstance = cache;
idlArray.add_objects({ Cache: ['self.cacheInstance'] });
idlArray.test();
});
}, 'test setup (cache creation)');
test(function() {
var req = new Request('http://{{host}}/',
{method: 'POST',
headers: [['Content-Type', 'Text/Html']]});
assert_equals(
new ExtendableEvent('ExtendableEvent').type,
'ExtendableEvent', 'Type of ExtendableEvent should be ExtendableEvent');
assert_throws(new TypeError, function() {
new FetchEvent('FetchEvent');
}, 'FetchEvent constructor with one argument throws');
assert_throws(new TypeError, function() {
new FetchEvent('FetchEvent', {});
}, 'FetchEvent constructor with empty init dict throws');
assert_throws(new TypeError, function() {
new FetchEvent('FetchEvent', {request: null});
}, 'FetchEvent constructor with null request member throws');
assert_equals(
new FetchEvent('FetchEvent', {request: req}).type,
'FetchEvent', 'Type of FetchEvent should be FetchEvent');
assert_equals(
new FetchEvent('FetchEvent', {request: req}).cancelable,
false, 'Default FetchEvent.cancelable should be false');
assert_equals(
new FetchEvent('FetchEvent', {request: req}).bubbles,
false, 'Default FetchEvent.bubbles should be false');
assert_equals(
new FetchEvent('FetchEvent', {request: req}).clientId,
'', 'Default FetchEvent.clientId should be the empty string');
assert_equals(
new FetchEvent('FetchEvent', {request: req, cancelable: false}).cancelable,
false, 'FetchEvent.cancelable should be false');
assert_equals(
new FetchEvent('FetchEvent', {request: req, clientId : 'test-client-id'}).clientId, 'test-client-id',
'FetchEvent.clientId with option {clientId : "test-client-id"} should be "test-client-id"');
assert_equals(
new FetchEvent('FetchEvent', {request : req}).request.url,
'http://{{host}}/',
'FetchEvent.request.url should return the value it was initialized to');
assert_equals(
new FetchEvent('FetchEvent', {request : req}).isReload,
undefined,
'FetchEvent.isReload should not exist');
}, 'Event constructors');
test(() => {
assert_false('XMLHttpRequest' in self);
}, 'xhr is not exposed');
test(() => {
assert_false('createObjectURL' in self.URL);
}, 'URL.createObjectURL is not exposed')