tor-browser

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

test_getUserMedia_audioConstraints.html (3256B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <script type="application/javascript" src="mediaStreamPlayback.js"></script>
      5 </head>
      6 <body>
      7 <pre id="test">
      8 <script type="application/javascript">
      9 "use strict";
     10 
     11 createHTML({
     12  title: "Test that microphone getSettings report correct settings after applyConstraints",
     13  bug: "1447982",
     14 });
     15 
     16 function testTrackAgainstAudioConstraints(track, audioConstraints) {
     17  let constraints = track.getConstraints();
     18  is(constraints.autoGainControl, audioConstraints.autoGainControl,
     19     "Should report correct autoGainControl constraint");
     20  is(constraints.echoCancellation, audioConstraints.echoCancellation,
     21     "Should report correct echoCancellation constraint");
     22  is(constraints.noiseSuppression, audioConstraints.noiseSuppression,
     23     "Should report correct noiseSuppression constraint");
     24 
     25  let settings = track.getSettings();
     26  is(settings.autoGainControl, audioConstraints.autoGainControl,
     27     "Should report correct autoGainControl setting");
     28  is(settings.echoCancellation, audioConstraints.echoCancellation,
     29     "Should report correct echoCancellation setting");
     30  is(settings.noiseSuppression, audioConstraints.noiseSuppression,
     31     "Should report correct noiseSuppression setting");
     32 }
     33 
     34 async function testAudioConstraints(track, audioConstraints) {
     35  // We applyConstraints() first and do a fresh gUM later, to avoid
     36  // testing multiple concurrent captures at different settings.
     37 
     38  info(`Testing applying constraints ${JSON.stringify(audioConstraints)} ` +
     39       `to track with settings ${JSON.stringify(track.getSettings())}`);
     40  await track.applyConstraints(audioConstraints);
     41  testTrackAgainstAudioConstraints(track, audioConstraints);
     42 
     43  info("Testing fresh gUM request with audio constraints " +
     44       JSON.stringify(audioConstraints));
     45  let stream = await getUserMedia({audio: audioConstraints});
     46  testTrackAgainstAudioConstraints(stream.getTracks()[0], audioConstraints);
     47  stream.getTracks().forEach(t => t.stop());
     48 }
     49 
     50 runTest(async () => {
     51  let audioDevice = SpecialPowers.getCharPref("media.audio_loopback_dev", "");
     52  if (!audioDevice) {
     53    ok(false, "No device set by framework. Try --use-test-media-devices");
     54    return;
     55  }
     56 
     57  let supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
     58  is(supportedConstraints.autoGainControl, true,
     59     "autoGainControl constraint should be supported");
     60  is(supportedConstraints.echoCancellation, true,
     61     "echoCancellation constraint should be supported");
     62  is(supportedConstraints.noiseSuppression, true,
     63     "noiseSuppression constraint should be supported");
     64 
     65  let egn = (e, g, n) => ({
     66    echoCancellation: e,
     67    autoGainControl: g,
     68    noiseSuppression: n
     69  });
     70 
     71  let stream = await getUserMedia({
     72    audio: egn(true, true, true),
     73  });
     74  let track = stream.getTracks()[0];
     75  let audioConstraintsToTest = [
     76    egn(false, true,  true),
     77    egn(true,  false, true),
     78    egn(true,  true,  false),
     79    egn(false, false, true),
     80    egn(false, true,  false),
     81    egn(true,  false, false),
     82    egn(false, false, false),
     83    egn(true,  true,  true),
     84  ];
     85  for (let audioConstraints of audioConstraintsToTest) {
     86    await testAudioConstraints(track, audioConstraints);
     87  }
     88  track.stop();
     89 });
     90 </script>
     91 </pre>
     92 </body>
     93 </html>