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>