broadcastchannel-success.html (1836B)
1 <!DOCTYPE html> 2 <!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> 3 <meta charset="utf-8"> 4 <title>Structured cloning of WebAssembly.Module: BroadcastChannel within the same agent cluster</title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="./resources/test-incrementer.js"></script> 8 9 <div id="log"></div> 10 11 <script> 12 "use strict"; 13 14 promise_test(t => { 15 return createWasmModule().then(module => { 16 let loadedIframes = 0; 17 return Promise.all([ 18 createIFrame("resources/broadcastchannel-iframe.html"), 19 createIFrame("resources/broadcastchannel-iframe.html"), 20 createIFrame("resources/broadcastchannel-iframe.html") 21 ]).then(() => { 22 const thisIframe = loadedIframes++; 23 const channel = new BroadcastChannel("channel name"); 24 25 return new Promise(resolve => { 26 let soFar = 0; 27 channel.onmessage = t.step_func(msg => { 28 if (msg.module) { 29 // We only care about "broadcasts" from the workers. 30 return; 31 } 32 33 let {i, result} = msg.data; 34 35 assert_in_array(i, [0, 1, 2], "Any message events must come from expected sources"); 36 assert_equals(result, i + 1, `iframe ${i} must return ${i+1}`); 37 ++soFar; 38 39 if (soFar === 3) { 40 resolve(); 41 } 42 }); 43 44 channel.postMessage({ module, i: thisIframe }); 45 }); 46 }); 47 }); 48 }); 49 50 function createIFrame(src) { 51 return new Promise((resolve, reject) => { 52 const iframe = document.createElement("iframe"); 53 iframe.src = src; 54 iframe.onload = () => resolve(iframe); 55 iframe.onerror = () => reject(`iframe with URL ${src} failed to load`); 56 document.body.appendChild(iframe); 57 }); 58 } 59 </script>