| <!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> |