mirror of
https://github.com/servo/servo
synced 2026-05-09 00:22:16 +02:00
70 lines
2.5 KiB
HTML
70 lines
2.5 KiB
HTML
<!DOCTYPE html>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/test-helpers.sub.js"></script>
|
|
<body>
|
|
<script>
|
|
(function () {
|
|
var t = async_test('Service Worker state property and "statechange" event');
|
|
var currentState = 'test-is-starting';
|
|
var scope = 'resources/state/';
|
|
|
|
service_worker_unregister_and_register(
|
|
t, 'resources/empty-worker.js', scope)
|
|
.then(t.step_func(function(registration) {
|
|
var sw = registration.installing;
|
|
sw.addEventListener('statechange', t.step_func(onStateChange(sw)));
|
|
assert_equals(sw.state, 'installing',
|
|
'the service worker should be in "installing" state.');
|
|
checkStateTransition(sw.state);
|
|
}))
|
|
.catch(unreached_rejection(t));
|
|
|
|
function checkStateTransition(newState) {
|
|
switch (currentState) {
|
|
case 'test-is-starting':
|
|
break; // anything goes
|
|
case 'installing':
|
|
assert_in_array(newState, ['installed', 'redundant']);
|
|
break;
|
|
case 'installed':
|
|
assert_in_array(newState, ['activating', 'redundant']);
|
|
break;
|
|
case 'activating':
|
|
assert_in_array(newState, ['activated', 'redundant']);
|
|
break;
|
|
case 'activated':
|
|
assert_equals(newState, 'redundant');
|
|
break;
|
|
case 'redundant':
|
|
assert_unreached('a ServiceWorker should not transition out of ' +
|
|
'the "redundant" state');
|
|
break;
|
|
default:
|
|
assert_unreached('should not transition into unknown state "' +
|
|
newState + '"');
|
|
break;
|
|
}
|
|
currentState = newState;
|
|
}
|
|
|
|
function onStateChange(expectedTarget) {
|
|
return function(event) {
|
|
assert_true(event.target instanceof ServiceWorker,
|
|
'the target of the statechange event should be a ' +
|
|
'ServiceWorker.');
|
|
assert_equals(event.target, expectedTarget,
|
|
'the target of the statechange event should be ' +
|
|
'the installing ServiceWorker');
|
|
assert_equals(event.type, 'statechange',
|
|
'the type of the event should be "statechange".');
|
|
|
|
checkStateTransition(event.target.state);
|
|
|
|
if (event.target.state == 'activated')
|
|
service_worker_unregister_and_done(t, scope);
|
|
};
|
|
}
|
|
}());
|
|
</script>
|