mirror of
https://github.com/servo/servo
synced 2026-05-08 16:12:15 +02:00
61 lines
2.0 KiB
HTML
61 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
<title>Service Worker: postMessage</title>
|
|
<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/blank.html';
|
|
var registration;
|
|
var worker;
|
|
service_worker_unregister_and_register(
|
|
t, 'resources/postmessage-worker.js', scope)
|
|
.then(function(r) {
|
|
registration = r;
|
|
worker = registration.installing;
|
|
var messageChannel = new MessageChannel();
|
|
messageChannel.port1.onmessage = t.step_func(onMessage);
|
|
worker.postMessage({port: messageChannel.port2},
|
|
[messageChannel.port2]);
|
|
worker.postMessage({value: 1});
|
|
worker.postMessage({value: 2});
|
|
worker.postMessage({done: true});
|
|
})
|
|
.catch(unreached_rejection(t));
|
|
|
|
var result = [];
|
|
var expected = [
|
|
'Acking value: 1',
|
|
'Acking value: 2',
|
|
];
|
|
|
|
function onMessage(e) {
|
|
var message = e.data;
|
|
if (message === 'quit') {
|
|
assert_array_equals(result, expected,
|
|
'Worker should post back expected values.');
|
|
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>
|