<script>
async_test(function(t) {
var scope = 'resources/blank.html';
+ var registration;
+ var worker;
service_worker_unregister_and_register(
t, 'resources/postmessage-worker.js', scope)
- .then(function(registration) {
- return wait_for_update(t, registration);
+ .then(function(r) {
+ registration = r;
+ return get_newest_worker(registration);
})
.then(function(sw) {
+ worker = sw;
var messageChannel = new MessageChannel();
messageChannel.port1.onmessage = t.step_func(onMessage);
sw.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
if (message === 'quit') {
assert_array_equals(result, expected,
'Worker should post back expected values.');
- service_worker_unregister_and_done(t, scope);
+ postMessageToRedundantWorker();
} else {
result.push(message);
}
};
+
+ function postMessageToRedundantWorker() {
+ registration.unregister(scope)
+ .then(function() {
+ return wait_for_state(t, worker, 'redundant');
+ })
+ .then(function() {
+ assert_equals(worker.state, 'redundant');
+ assert_throws(
+ {name:'InvalidStateError'},
+ function() { worker.postMessage(''); },
+ 'Calling postMessage on a redundant ServiceWorker should ' +
+ 'throw InvalidStateError.');
+ t.done();
+ })
+ .catch(unreached_rejection(t));
+ }
}, 'postMessage to a ServiceWorker (and back via MessagePort)');
</script>