tor-browser

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

getUserMedia-audio-disabled-clone.https.html (1680B)


      1 <!doctype html>
      2 <title>Test clone of disabled audio track from getUserMedia()</title>
      3 <script src=/resources/testharness.js></script>
      4 <script src=/resources/testharnessreport.js></script>
      5 <body></body>
      6 <script>
      7 'use strict';
      8 
      9 async function promise_is_track_silent(track) {
     10  const ctx = new AudioContext();
     11  const sourceNode =
     12      new MediaStreamTrackAudioSourceNode(ctx, {mediaStreamTrack: track});
     13  const processor = ctx.createScriptProcessor(8192, 1, 0);
     14  sourceNode.connect(processor);
     15  const e = await new Promise(resolve => processor.onaudioprocess = resolve);
     16  ctx.close();
     17  const input = e.inputBuffer.getChannelData(0);
     18  for (const sample of input) {
     19    if (sample != 0.0) {
     20      return false;
     21    }
     22  }
     23  return true;
     24 }
     25 
     26 promise_test(async t => {
     27  const stream = await navigator.mediaDevices.getUserMedia({audio: true});
     28  const [track] = stream.getTracks();
     29  track.enabled = false;
     30  // media.getusermedia.microphone.off_while_disabled.delay_ms is 0.
     31  // Allow some events to be processed for DeviceListener::SetDeviceEnabled()
     32  // to change mDeviceState.mDeviceEnabled.
     33  for (const i of Array(2).keys()) {
     34    await new Promise(resolve => t.step_timeout(resolve, 0));
     35  }
     36  const clone = track.clone();
     37  assert_false(clone.enabled, 'clone.enabled');
     38  assert_true(await promise_is_track_silent(clone),
     39              'clone silent before enabled');
     40  clone.enabled = true;
     41  assert_false(await promise_is_track_silent(clone),
     42               'clone silent after enabled');
     43  assert_false(track.enabled, 'track.enabled');
     44  assert_true(await promise_is_track_silent(track), 'track silent');
     45 }, 'clone of disabled getUserMedia() audio track');
     46 </script>