tor-browser

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

test_getUserMedia_mediaStreamConstructors.html (7900B)


      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: "MediaStream constructors with getUserMedia streams Test",
     13    bug: "1070216"
     14  });
     15 
     16  var audioContext = new AudioContext();
     17  var videoElement;
     18 
     19  runTest(() => Promise.resolve()
     20    .then(() => videoElement = createMediaElement('video', 'constructorsTest'))
     21    .then(() => getUserMedia({video: true})).then(gUMStream => {
     22      info("Test default constructor with video");
     23      ok(gUMStream.active, "gUMStream with one track should be active");
     24      var track = gUMStream.getTracks()[0];
     25 
     26      var stream = new MediaStream();
     27      ok(!stream.active, "New MediaStream should be inactive");
     28      checkMediaStreamContains(stream, [], "Default constructed stream");
     29 
     30      stream.addTrack(track);
     31      ok(stream.active, "MediaStream should be active after adding a track");
     32      checkMediaStreamContains(stream, [track], "Added video track");
     33 
     34      var playback = new MediaStreamPlayback(videoElement, stream);
     35      return playback.playMedia(false).then(() => {
     36        ok(!gUMStream.active, "gUMStream should be inactive after stopping");
     37        ok(!stream.active, "stream with stopped tracks should be inactive");
     38      });
     39    })
     40    .then(() => getUserMedia({video: true})).then(gUMStream => {
     41      info("Test copy constructor with gUM stream");
     42      ok(gUMStream.active, "gUMStream with one track should be active");
     43      var track = gUMStream.getTracks()[0];
     44 
     45      var stream = new MediaStream(gUMStream);
     46      ok(stream.active, "List constructed MediaStream should be active");
     47      checkMediaStreamContains(stream, [track], "Copy constructed video track");
     48 
     49      var playback = new MediaStreamPlayback(videoElement, stream);
     50      return playback.playMedia(false).then(() => {
     51        ok(!gUMStream.active, "gUMStream should be inactive after stopping");
     52        ok(!stream.active, "stream with stopped tracks should be inactive");
     53      });
     54    })
     55    .then(() => getUserMedia({video: true})).then(gUMStream => {
     56      info("Test list constructor with empty list");
     57      ok(gUMStream.active, "gUMStream with one track should be active");
     58      var track = gUMStream.getTracks()[0];
     59 
     60      var stream = new MediaStream([]);
     61      ok(!stream.active, "Empty-list constructed MediaStream should be inactive");
     62      checkMediaStreamContains(stream, [], "Empty-list constructed stream");
     63 
     64      stream.addTrack(track);
     65      ok(stream.active, "MediaStream should be active after adding a track");
     66      checkMediaStreamContains(stream, [track], "Added video track");
     67 
     68      var playback = new MediaStreamPlayback(videoElement, stream);
     69      return playback.playMedia(false).then(() => {
     70        ok(!gUMStream.active, "gUMStream should be inactive after stopping");
     71        ok(!stream.active, "stream with stopped tracks should be inactive");
     72      });
     73    })
     74    .then(() => getUserMedia({audio: true, video: true})).then(gUMStream => {
     75      info("Test list constructor with a gUM audio/video stream");
     76      ok(gUMStream.active, "gUMStream with two tracks should be active");
     77      var audioTrack = gUMStream.getAudioTracks()[0];
     78      var videoTrack = gUMStream.getVideoTracks()[0];
     79 
     80      var stream = new MediaStream([audioTrack, videoTrack]);
     81      ok(stream.active, "List constructed MediaStream should be active");
     82      checkMediaStreamContains(stream, [audioTrack, videoTrack],
     83                               "List constructed audio and video tracks");
     84 
     85      var playback = new MediaStreamPlayback(videoElement, stream);
     86      return playback.playMedia(false).then(() => {
     87        ok(!gUMStream.active, "gUMStream should be inactive after stopping");
     88        ok(!stream.active, "stream with stopped tracks should be inactive");
     89      });
     90    })
     91    .then(() => getUserMedia({video: true})).then(gUMStream => {
     92      info("Test list constructor with gUM-video and WebAudio tracks");
     93      ok(gUMStream.active, "gUMStream with one track should be active");
     94      var audioStream = createOscillatorStream(audioContext, 2000);
     95      ok(audioStream.active, "WebAudio stream should be active");
     96 
     97      var audioTrack = audioStream.getTracks()[0];
     98      var videoTrack = gUMStream.getTracks()[0];
     99 
    100      var stream = new MediaStream([audioTrack, videoTrack]);
    101      ok(stream.active, "List constructed MediaStream should be active");
    102      checkMediaStreamContains(stream, [audioTrack, videoTrack],
    103                               "List constructed WebAudio and gUM-video tracks");
    104 
    105      var playback = new MediaStreamPlayback(videoElement, stream);
    106      return playback.playMedia(false).then(() => {
    107        gUMStream.getTracks().forEach(t => t.stop());
    108        ok(!gUMStream.active, "gUMStream should be inactive after stopping");
    109        ok(!stream.active, "stream with stopped tracks should be inactive");
    110      });
    111    })
    112    .then(() => {
    113      var osc1k = createOscillatorStream(audioContext, 1000);
    114      var audioTrack1k = osc1k.getTracks()[0];
    115 
    116      var osc5k = createOscillatorStream(audioContext, 5000);
    117      var audioTrack5k = osc5k.getTracks()[0];
    118 
    119      var osc10k = createOscillatorStream(audioContext, 10000);
    120      var audioTrack10k = osc10k.getTracks()[0];
    121 
    122      return Promise.resolve().then(() => {
    123        info("Analysing audio output with empty default constructed stream");
    124        var stream = new MediaStream();
    125        var analyser = new AudioStreamAnalyser(audioContext, stream);
    126        return analyser.waitForAnalysisSuccess(array =>
    127          array[analyser.binIndexForFrequency(1000)]  < 50 &&
    128          array[analyser.binIndexForFrequency(5000)]  < 50 &&
    129          array[analyser.binIndexForFrequency(10000)] < 50)
    130          .then(() => analyser.disconnect());
    131      }).then(() => {
    132        info("Analysing audio output with copy constructed 5k stream");
    133        var stream = new MediaStream(osc5k);
    134        is(stream.active, osc5k.active,
    135           "Copy constructed MediaStream should preserve active state");
    136        var analyser = new AudioStreamAnalyser(audioContext, stream);
    137        return analyser.waitForAnalysisSuccess(array =>
    138          array[analyser.binIndexForFrequency(1000)]  < 50 &&
    139          array[analyser.binIndexForFrequency(5000)]  > 200 &&
    140          array[analyser.binIndexForFrequency(10000)] < 50)
    141          .then(() => analyser.disconnect());
    142      }).then(() => {
    143        info("Analysing audio output with empty-list constructed stream");
    144        var stream = new MediaStream([]);
    145        var analyser = new AudioStreamAnalyser(audioContext, stream);
    146        return analyser.waitForAnalysisSuccess(array =>
    147          array[analyser.binIndexForFrequency(1000)]  < 50 &&
    148          array[analyser.binIndexForFrequency(5000)]  < 50 &&
    149          array[analyser.binIndexForFrequency(10000)] < 50)
    150          .then(() => analyser.disconnect());
    151      }).then(() => {
    152        info("Analysing audio output with list constructed 1k, 5k and 10k tracks");
    153        var stream = new MediaStream([audioTrack1k, audioTrack5k, audioTrack10k]);
    154        ok(stream.active,
    155           "List constructed MediaStream from WebAudio should be active");
    156        var analyser = new AudioStreamAnalyser(audioContext, stream);
    157        return analyser.waitForAnalysisSuccess(array =>
    158          array[analyser.binIndexForFrequency(50)]    < 50 &&
    159          array[analyser.binIndexForFrequency(1000)]  > 200 &&
    160          array[analyser.binIndexForFrequency(2500)]  < 50 &&
    161          array[analyser.binIndexForFrequency(5000)]  > 200 &&
    162          array[analyser.binIndexForFrequency(7500)]  < 50 &&
    163          array[analyser.binIndexForFrequency(10000)] > 200 &&
    164          array[analyser.binIndexForFrequency(11000)] < 50)
    165          .then(() => analyser.disconnect());
    166      });
    167    }));
    168 </script>
    169 </pre>
    170 </body>
    171 </html>