mirror of
https://github.com/servo/servo.git
synced 2025-07-12 09:53:40 +01:00
141 lines
4.4 KiB
HTML
141 lines
4.4 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script>
|
|
|
|
async_test(t => {
|
|
let c1 = new BroadcastChannel('worker');
|
|
let c2 = new BroadcastChannel('worker');
|
|
let events = [];
|
|
|
|
c1.onmessage = e => events.push(e);
|
|
c2.onmessage = e => events.push(e);
|
|
|
|
let doneCount = 0;
|
|
c2.addEventListener('message', t.step_func(e => {
|
|
if (e.data == 'from worker') {
|
|
c2.postMessage('from c2');
|
|
c1.postMessage('done');
|
|
} else if (e.data == 'done') {
|
|
assert_equals(events.length, 4);
|
|
assert_equals(events[0].data, 'from worker');
|
|
assert_equals(events[0].target, c1);
|
|
assert_equals(events[1].data, 'from worker');
|
|
assert_equals(events[1].target, c2);
|
|
assert_equals(events[2].data, 'from c2');
|
|
assert_equals(events[3].data, 'done');
|
|
if (++doneCount == 2) t.done();
|
|
}
|
|
}));
|
|
|
|
let worker = new Worker('resources/worker.js');
|
|
worker.onmessage = t.step_func(e => {
|
|
assert_array_equals(e.data, ['from c2', 'done']);
|
|
if (++doneCount == 2) t.done();
|
|
});
|
|
worker.postMessage({channel: 'worker'});
|
|
|
|
}, 'BroadcastChannel works in workers');
|
|
|
|
async_test(t => {
|
|
let c1 = new BroadcastChannel('shared worker');
|
|
let c2 = new BroadcastChannel('shared worker');
|
|
let events = [];
|
|
|
|
c1.onmessage = e => events.push(e);
|
|
c2.onmessage = e => events.push(e);
|
|
|
|
let doneCount = 0;
|
|
c2.addEventListener('message', t.step_func(e => {
|
|
if (e.data == 'from worker') {
|
|
c2.postMessage('from c2');
|
|
c1.postMessage('done');
|
|
} else if (e.data == 'done') {
|
|
assert_equals(events.length, 4);
|
|
assert_equals(events[0].data, 'from worker');
|
|
assert_equals(events[0].target, c1);
|
|
assert_equals(events[1].data, 'from worker');
|
|
assert_equals(events[1].target, c2);
|
|
assert_equals(events[2].data, 'from c2');
|
|
assert_equals(events[3].data, 'done');
|
|
if (++doneCount == 2) t.done();
|
|
}
|
|
}));
|
|
|
|
let worker = new SharedWorker('resources/worker.js');
|
|
worker.port.onmessage = t.step_func(e => {
|
|
assert_array_equals(e.data, ['from c2', 'done']);
|
|
if (++doneCount == 2) t.done();
|
|
});
|
|
worker.port.postMessage({channel: 'shared worker'});
|
|
|
|
}, 'BroadcastChannel works in shared workers');
|
|
|
|
async_test(t => {
|
|
let c = new BroadcastChannel('worker-close');
|
|
let events = [];
|
|
|
|
c.onmessage = e => events.push('c1: ' + e.data);
|
|
|
|
let worker = new Worker('resources/worker.js');
|
|
worker.onmessage = t.step_func(e => {
|
|
assert_array_equals(events, ['c1: from worker', 'c2: echo'],
|
|
'messages in document');
|
|
assert_array_equals(e.data, ['done'], 'messages in worker');
|
|
t.done();
|
|
});
|
|
|
|
c.addEventListener('message', e => {
|
|
if (e.data == 'from worker') {
|
|
c.close();
|
|
if (self.gc) self.gc();
|
|
window.setTimeout(() => {
|
|
let c2 = new BroadcastChannel('worker-close');
|
|
c2.onmessage = e => {
|
|
events.push('c2: ' + e.data);
|
|
c2.postMessage('done');
|
|
};
|
|
worker.postMessage({ping: 'echo'});
|
|
}, 1);
|
|
}
|
|
});
|
|
|
|
worker.postMessage({channel: 'worker-close'});
|
|
|
|
}, 'Closing and re-opening a channel works.');
|
|
|
|
async_test(t => {
|
|
function workerCode() {
|
|
close();
|
|
var bc = new BroadcastChannel('worker-test');
|
|
postMessage(true);
|
|
}
|
|
|
|
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
|
|
|
|
var w = new Worker(URL.createObjectURL(workerBlob));
|
|
w.onmessage = function(e) {
|
|
assert_true(e.data, "BroadcastChannel created on worker shutdown.");
|
|
t.done();
|
|
}
|
|
}, 'BroadcastChannel created after a worker self.close()');
|
|
|
|
async_test(t => {
|
|
function workerCode() {
|
|
close();
|
|
var bc = new BroadcastChannel('worker-test-after-close');
|
|
bc.postMessage(true);
|
|
}
|
|
|
|
var bc = new BroadcastChannel('worker-test-after-close');
|
|
bc.onmessage = function(e) {
|
|
assert_true(e.data, "BroadcastChannel created on worker shutdown.");
|
|
t.done();
|
|
}
|
|
|
|
var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"});
|
|
new Worker(URL.createObjectURL(workerBlob));
|
|
}, 'BroadcastChannel used after a worker self.close()');
|
|
|
|
</script>
|