blob: a0dea5428db141c6c70688b705ebe60c85d0a54d [file] [log] [blame]
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
async_test(function(t) {
var scope = 'resources/scope/installing-waiting-active-after-registration';
var worker_url = 'resources/empty-worker.js';
var expected_url = normalizeURL(worker_url);
service_worker_unregister_and_register(t, worker_url, scope)
.then(function(r) {
registration = r;
assert_equals(registration.installing.scriptURL, expected_url,
'installing before updatefound');
assert_equals(registration.waiting, null,
'waiting before updatefound');
assert_equals(registration.active, null,
'active before updatefound');
return wait_for_update(t, registration);
})
.then(function(worker) {
assert_equals(registration.installing.scriptURL, expected_url,
'installing after updatefound');
assert_equals(registration.waiting, null,
'waiting after updatefound');
assert_equals(registration.active, null,
'active after updatefound');
return wait_for_state(t, registration.installing, 'installed');
})
.then(function() {
assert_equals(registration.installing, null,
'installing after installed');
var newest = registration.waiting || registration.active;
assert_equals(newest.scriptURL, expected_url,
'waiting or active after installed');
if (registration.waiting) {
return wait_for_state(t, registration.waiting, 'activated')
.then(function() {
assert_equals(registration.installing, null,
'installing after activated');
assert_equals(registration.waiting, null,
'waiting after activated');
assert_equals(registration.active.scriptURL, expected_url,
'active after activated');
});
}
})
.then(function() {
return Promise.all([
wait_for_state(t, registration.active, 'redundant'),
registration.unregister()
]);
})
.then(function() {
assert_equals(registration.installing, null,
'installing after redundant');
assert_equals(registration.waiting, null,
'waiting after redundant');
// According to spec, Clear Registration runs Update State which is
// immediately followed by setting active to null, which means by the
// time the event loop turns and the Promise for statechange is
// resolved, this will be gone.
assert_equals(registration.active, null,
'active should be null after redundant');
t.done();
})
.catch(unreached_rejection(t));
}, 'installing/waiting/active after registration');
</script>