broadcastchannel-success.https.html (2085B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Structured cloning of SharedArrayBuffers: BroadcastChannel within the same agent cluster</title> 4 <link rel="help" href="https://html.spec.whatwg.org/multipage/#structuredserialize"> 5 <link rel="help" href="https://html.spec.whatwg.org/multipage/#broadcasting-to-other-browsing-contexts"> 6 <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script src="/common/utils.js"></script> <!-- Use token() to allow running tests in parallel --> 10 11 <div id="log"></div> 12 13 <script> 14 "use strict"; 15 16 promise_test(t => { 17 const channelName = token(); 18 return Promise.all([ 19 createIFrame(`resources/broadcastchannel-iframe.html?channel=${channelName}&index=0`), 20 createIFrame(`resources/broadcastchannel-iframe.html?channel=${channelName}&index=1`), 21 createIFrame(`resources/broadcastchannel-iframe.html?channel=${channelName}&index=2`) 22 ]).then(() => { 23 const sab = new SharedArrayBuffer(3); 24 const view = new Uint8Array(sab); 25 const channel = new BroadcastChannel(channelName); 26 27 return new Promise(resolve => { 28 let soFar = 0; 29 channel.onmessage = t.step_func(({ data: { i } }) => { 30 assert_in_array(i, [0, 1, 2], "Any message events must come from expected sources"); 31 ++soFar; 32 33 if (soFar === 3) { 34 assert_equals(view[0], 1, "The first iframe must have set view[0] to 1"); 35 assert_equals(view[1], 2, "The second iframe must have set view[1] to 2"); 36 assert_equals(view[2], 3, "The third iframe must have set view[2] to 3"); 37 resolve(); 38 } 39 }); 40 41 channel.postMessage({ sab }); 42 }); 43 }); 44 }); 45 46 function createIFrame(src) { 47 return new Promise((resolve, reject) => { 48 const iframe = document.createElement("iframe"); 49 iframe.src = src; 50 iframe.onload = () => resolve(iframe); 51 iframe.onerror = () => reject(`iframe with URL ${src} failed to load`); 52 document.body.appendChild(iframe); 53 }); 54 } 55 </script>