47 lines
1.6 KiB
HTML
47 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script>
|
|
|
|
const SERVICE_WORKER_TEST_CHANNEL_NAME = 'service worker';
|
|
const events = [];
|
|
const c1 = new BroadcastChannel(SERVICE_WORKER_TEST_CHANNEL_NAME);
|
|
const c2 = new BroadcastChannel(SERVICE_WORKER_TEST_CHANNEL_NAME);
|
|
c1.onmessage = e => events.push(e);
|
|
c2.onmessage = e => events.push(e);
|
|
|
|
function testCompletion(t) {
|
|
return new Promise((resolve) => {
|
|
c2.addEventListener("message", t.step_func(e => {
|
|
if (e.data == 'from worker') {
|
|
c2.postMessage('from c2');
|
|
} else if (e.data == 'done') {
|
|
assert_equals(events.length, 5);
|
|
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');
|
|
assert_equals(events[3].target, c1);
|
|
assert_equals(events[4].data, 'done');
|
|
assert_equals(events[4].target, c2);
|
|
resolve();
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
|
|
promise_test(async t => {
|
|
|
|
const testResults = testCompletion(t);
|
|
const SCRIPT = "resources/service-worker.js";
|
|
const SCOPE = "/webmessaging/broadcastchannel/resources/not-used/";
|
|
|
|
const reg = await navigator.serviceWorker.register(SCRIPT, {'scope': SCOPE});
|
|
t.add_cleanup(() => reg.unregister());
|
|
|
|
return testResults;
|
|
}, 'BroadcastChannel works in service workers');
|
|
</script>
|