mirror of
https://github.com/servo/servo.git
synced 2025-06-24 17:14:33 +01:00
74 lines
2.6 KiB
HTML
74 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/comms.html#dom-messageport-close">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script>
|
|
// How long (in ms) these tests should wait before deciding no further messages
|
|
// will be received.
|
|
const time_to_wait_for_messages = 100;
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
c.port1.onmessage = t.unreached_func('Should not have delivered message');
|
|
c.port1.close();
|
|
c.port2.postMessage('TEST');
|
|
setTimeout(t.step_func_done(), time_to_wait_for_messages);
|
|
}, 'Message sent to closed port should not arrive.');
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
c.port1.onmessage = t.unreached_func('Should not have delivered message');
|
|
c.port2.close();
|
|
c.port2.postMessage('TEST');
|
|
setTimeout(t.step_func_done(), time_to_wait_for_messages);
|
|
}, 'Message sent from closed port should not arrive.');
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
c.port1.onmessage = t.unreached_func('Should not have delivered message');
|
|
c.port1.close();
|
|
const c2 = new MessageChannel();
|
|
c2.port1.onmessage = t.step_func(e => {
|
|
e.ports[0].postMessage('TESTMSG');
|
|
setTimeout(t.step_func_done(), time_to_wait_for_messages);
|
|
});
|
|
c2.port2.postMessage('TEST', [c.port2]);
|
|
}, 'Message sent to closed port from transferred port should not arrive.');
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
c.port1.onmessage = t.unreached_func('Should not have delivered message');
|
|
c.port2.close();
|
|
const c2 = new MessageChannel();
|
|
c2.port1.onmessage = t.step_func(e => {
|
|
e.ports[0].postMessage('TESTMSG');
|
|
setTimeout(t.step_func_done(), time_to_wait_for_messages);
|
|
});
|
|
c2.port2.postMessage('TEST', [c.port2]);
|
|
}, 'Message sent from transferred closed port should not arrive.');
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
let isClosed = false;
|
|
c.port1.onmessage = t.step_func_done(e => {
|
|
assert_true(isClosed);
|
|
assert_equals(e.data, 'TEST');
|
|
});
|
|
c.port2.postMessage('TEST');
|
|
c.port2.close();
|
|
isClosed = true;
|
|
}, 'Inflight messages should be delivered even when sending port is closed afterwards.');
|
|
|
|
async_test(t => {
|
|
const c = new MessageChannel();
|
|
c.port1.onmessage = t.step_func_done(e => {
|
|
if (e.data == 'DONE') t.done();
|
|
assert_equals(e.data, 'TEST');
|
|
c.port1.close();
|
|
});
|
|
c.port2.postMessage('TEST');
|
|
c.port2.postMessage('DONE');
|
|
}, 'Close in onmessage should not cancel inflight messages.');
|
|
|
|
</script>
|