tor-browser

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

suspended-context-messageport.https.html (2120B)


      1 <!doctype html>
      2 <title>Test MessagePort while AudioContext is not running</title>
      3 <script src=/resources/testharness.js></script>
      4 <script src=/resources/testharnessreport.js></script>
      5 <script>
      6 const get_node_and_message = (context) => {
      7  const node = new AudioWorkletNode(context, 'port-processor');
      8  return new Promise((resolve) => {
      9    node.port.onmessage = (event) => resolve({node: node, event: event});
     10  });
     11 };
     12 const ping_for_message = (node) => {
     13  return new Promise((resolve) => {
     14    node.port.onmessage = resolve;
     15    node.port.postMessage('ping');
     16  });
     17 };
     18 const modulePath = 'processors/port-processor.js';
     19 
     20 promise_test(async () => {
     21  const realtime = new AudioContext();
     22  // suspend() call as early as possible due to https://crbug.com/40140417.
     23  await realtime.suspend();
     24  await realtime.audioWorklet.addModule(modulePath);
     25  const currentTime = realtime.currentTime;
     26  let {node, event} = await get_node_and_message(realtime);
     27  assert_equals(event.data.timeStamp, currentTime, 'created message time');
     28  event = await ping_for_message(node);
     29  assert_equals(event.data.timeStamp, currentTime, 'pong time');
     30 }, 'realtime suspended');
     31 
     32 let offline;
     33 promise_test(async () => {
     34  offline = new OfflineAudioContext({length: 128 + 1, sampleRate: 16384});
     35  await offline.audioWorklet.addModule(modulePath);
     36  assert_equals(offline.currentTime, 0, 'time before start');
     37  let {node, event} = await get_node_and_message(offline);
     38  assert_equals(event.data.timeStamp, 0, 'created time before start');
     39  event = await ping_for_message(node);
     40  assert_equals(event.data.timeStamp, 0, 'pong time before start');
     41 }, 'offline before start');
     42 
     43 promise_test(async () => {
     44  await offline.startRendering();
     45  const expected = 2 * 128 / offline.sampleRate;
     46  assert_equals(offline.currentTime, expected, 'time on complete');
     47  let {node, event} = await get_node_and_message(offline);
     48  assert_equals(event.data.timeStamp, expected, "created time on complete");
     49  event = await ping_for_message(node);
     50  assert_equals(event.data.timeStamp, expected, "pong time on complete");
     51 }, 'offline on complete');
     52 </script>