tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>