blob: 1f64b56ad5c9633507f913f70f484f3e1b9c8a22 [file] [log] [blame]
importScripts('../../resources/test-helpers.js');
importScripts('../../resources/worker-testharness.js');
// TODO(nhiroki): stop using global states because service workers can be killed
// at any point. Instead, we could post a message to the page on each event via
// Client object (http://crbug.com/558244).
var events_seen = [];
// TODO(nhiroki): Move these assertions to registration-attribute.html because
// an assertion failure on the worker is not shown on the result page and
// handled as timeout. See registration-attribute-newer-worker.js for example.
assert_equals(
self.registration.scope,
normalizeURL('scope/registration-attribute'),
'On worker script evaluation, registration attribute should be set');
assert_equals(
self.registration.installing,
null,
'On worker script evaluation, installing worker should be null');
assert_equals(
self.registration.waiting,
null,
'On worker script evaluation, waiting worker should be null');
assert_equals(
self.registration.active,
null,
'On worker script evaluation, active worker should be null');
self.registration.addEventListener('updatefound', function() {
events_seen.push('updatefound');
assert_equals(
self.registration.scope,
normalizeURL('scope/registration-attribute'),
'On updatefound event, registration attribute should be set');
assert_equals(
self.registration.installing.scriptURL,
normalizeURL('registration-attribute-worker.js'),
'On updatefound event, installing worker should be set');
assert_equals(
self.registration.waiting,
null,
'On updatefound event, waiting worker should be null');
assert_equals(
self.registration.active,
null,
'On updatefound event, active worker should be null');
assert_equals(
self.registration.installing.state,
'installing',
'On updatefound event, worker should be in the installing state');
var worker = self.registration.installing;
self.registration.installing.addEventListener('statechange', function() {
events_seen.push('statechange(' + worker.state + ')');
});
});
self.addEventListener('install', function(e) {
events_seen.push('install');
assert_equals(
self.registration.scope,
normalizeURL('scope/registration-attribute'),
'On install event, registration attribute should be set');
assert_equals(
self.registration.installing.scriptURL,
normalizeURL('registration-attribute-worker.js'),
'On install event, installing worker should be set');
assert_equals(
self.registration.waiting,
null,
'On install event, waiting worker should be null');
assert_equals(
self.registration.active,
null,
'On install event, active worker should be null');
assert_equals(
self.registration.installing.state,
'installing',
'On install event, worker should be in the installing state');
});
self.addEventListener('activate', function(e) {
events_seen.push('activate');
assert_equals(
self.registration.scope,
normalizeURL('scope/registration-attribute'),
'On activate event, registration attribute should be set');
assert_equals(
self.registration.installing,
null,
'On activate event, installing worker should be null');
assert_equals(
self.registration.waiting,
null,
'On activate event, waiting worker should be null');
assert_equals(
self.registration.active.scriptURL,
normalizeURL('registration-attribute-worker.js'),
'On activate event, active worker should be set');
assert_equals(
self.registration.active.state,
'activating',
'On activate event, worker should be in the activating state');
});
self.addEventListener('fetch', function(e) {
events_seen.push('fetch');
assert_equals(
self.registration.scope,
normalizeURL('scope/registration-attribute'),
'On fetch event, registration attribute should be set');
assert_equals(
self.registration.installing,
null,
'On fetch event, installing worker should be null');
assert_equals(
self.registration.waiting,
null,
'On fetch event, waiting worker should be null');
assert_equals(
self.registration.active.scriptURL,
normalizeURL('registration-attribute-worker.js'),
'On fetch event, active worker should be set');
assert_equals(
self.registration.active.state,
'activated',
'On fetch event, worker should be in the activated state');
e.respondWith(new Response(events_seen));
});