tor-browser

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

test_mediarecorder_bitrate.html (4153B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test MediaRecorder Bitrate</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script type="text/javascript" src="manifest.js"></script>
      8 </head>
      9 <body>
     10 <pre id="test">
     11 <script class="testbody" type="text/javascript">
     12 var manager = new MediaTestManager;
     13 var results = [];
     14 
     15 /**
     16 * Starts a test on every media recorder file included to check that
     17 * the bitrate control works
     18 */
     19 function startTest(test, token) {
     20  manager.started(token);
     21  runTest(test, token, 1000000);
     22  runTest(test, token, 100000);
     23 }
     24 
     25 function runTest(test, token, bitrate) {
     26  var element = document.createElement('video');
     27 
     28  element.token = token;
     29 
     30  element.src = test.name;
     31  element.preload = "metadata";
     32  element.onloadedmetadata = function () {
     33    info("loadedmetadata");
     34    const stream = element.mozCaptureStreamUntilEnded();
     35    element.onloadedmetadata = null;
     36    element.play();
     37 
     38    const mediaRecorder = new MediaRecorder(stream, {videoBitsPerSecond: bitrate});
     39    mediaRecorder.start();
     40    is(mediaRecorder.state, 'recording', 'Media recorder should be recording');
     41    is(mediaRecorder.stream, stream,
     42     'Media recorder stream = element stream at the start of recording');
     43 
     44    var onStopFired = false;
     45    var onDataAvailableFired = false;
     46    var encoded_size = 0;
     47 
     48    mediaRecorder.onerror = function () {
     49      ok(false, 'Unexpected onerror callback fired');
     50    };
     51 
     52    mediaRecorder.onwarning = function () {
     53      ok(false, 'Unexpected onwarning callback fired');
     54    };
     55 
     56    // This handler verifies that only a single onstop event handler is fired.
     57    mediaRecorder.onstop = function () {
     58      if (onStopFired) {
     59        ok(false, 'onstop unexpectedly fired more than once');
     60      } else {
     61        onStopFired = true;
     62 
     63        // ondataavailable should always fire before onstop
     64        if (onDataAvailableFired) {
     65          ok(true, 'onstop fired after ondataavailable');
     66          info("test " + test.name + " encoded@" + bitrate + "=" + encoded_size);
     67          if (results[test.name]) {
     68            var big, small, temp;
     69            big = {};
     70            big.bitrate = bitrate;
     71            big.size = encoded_size;
     72            small = results[test.name];
     73            // Don't assume the order that these will finish in
     74            if (results[test.name].bitrate > bitrate) {
     75              temp = big;
     76              big = small;
     77              small = temp;
     78            }
     79            // Ensure there is a big enough difference in the encoded
     80            // sizes
     81            ok(small.size*1.25 < big.size,
     82               test.name + ' encoded@' + big.bitrate + '=' + big.size +
     83               ' > encoded@' + small.bitrate + '=' + small.size);
     84            manager.finished(token);
     85          } else {
     86            results[test.name] = {};
     87            results[test.name].bitrate = bitrate;
     88            results[test.name].size = encoded_size;
     89          }
     90        } else {
     91          ok(false, 'onstop fired without an ondataavailable event first');
     92        }
     93      }
     94    };
     95 
     96    // This handler verifies that only a single ondataavailable event handler
     97    // is fired with the blob generated having greater than zero size
     98    // and a correct mime type.
     99    mediaRecorder.ondataavailable = function (evt) {
    100      if (onDataAvailableFired) {
    101        ok(false, 'ondataavailable unexpectedly fired more than once');
    102      } else {
    103        onDataAvailableFired = true;
    104 
    105        ok(evt instanceof BlobEvent,
    106           'Events fired from ondataavailable should be BlobEvent');
    107        is(evt.type, 'dataavailable',
    108           'Event type should dataavailable');
    109        ok(evt.data.size > 0,
    110           'Blob data received should be greater than zero');
    111        encoded_size = evt.data.size;
    112 
    113        // onstop should not have fired before ondataavailable
    114        if (onStopFired) {
    115          ok(false, 'ondataavailable unexpectedly fired later than onstop');
    116          manager.finished(token);
    117        }
    118      }
    119    };
    120  };
    121 }
    122 
    123 manager.runTests(gMediaRecorderVideoTests, startTest);
    124 </script>
    125 </pre>
    126 </body>
    127 </html>