tor-browser

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

test_mediarecorder_record_timeslice.html (3315B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test MediaRecorder Record Timeslice</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 
     14 /**
     15 * Starts a test on every media recorder file included to check that a stream
     16 * derived from the file can be recorded with a timeslice provided
     17 */
     18 function startTest(test, token) {
     19  var element = document.createElement('audio');
     20  var expectedMimeType = test.type;
     21 
     22  element.token = token;
     23  manager.started(token);
     24 
     25  element.src = test.name;
     26  element.test = test;
     27  element.preload = "auto";
     28 
     29  // Set up MediaRecorder once loadedmetadata fires and tracks are available.
     30  element.onloadedmetadata = function() {
     31    element.onloadedmetadata = null;
     32 
     33    const stream = element.mozCaptureStream();
     34    const mediaRecorder =
     35      new MediaRecorder(stream, {mimeType: expectedMimeType});
     36 
     37    mediaRecorder.onerror = function () {
     38      ok(false, 'Unexpected onerror callback fired');
     39    };
     40 
     41    mediaRecorder.onwarning = function () {
     42      ok(false, 'Unexpected onwarning callback fired');
     43    };
     44 
     45    mediaRecorder.onstop = function () {
     46      ok(false, 'Unexpected onstop callback fired');
     47    };
     48 
     49    var dataAvailableCount = 0;
     50    var onDataAvailableFirst = false;
     51 
     52    // This handler fires every 250ms to generate a blob.
     53    mediaRecorder.ondataavailable = function (evt) {
     54      info('ondataavailable fired');
     55      dataAvailableCount++;
     56 
     57      ok(evt instanceof BlobEvent,
     58         'Events fired from ondataavailable should be BlobEvent');
     59      is(evt.type, 'dataavailable',
     60         'Event type should dataavailable');
     61      ok(evt.data.size >= 0,
     62         'Blob data size received is greater than or equal to zero');
     63 
     64      is(evt.data.type, expectedMimeType,
     65         'Blob data received should have type = ' + expectedMimeType);
     66      is(mediaRecorder.mimeType, expectedMimeType,
     67         'Mime type in ondataavailable = ' + mediaRecorder.mimeType);
     68 
     69      // We'll stop recording upon the 1st blob being received
     70      if (dataAvailableCount === 1) {
     71        mediaRecorder.onstop = function () {
     72          info('onstop fired');
     73 
     74          if (!onDataAvailableFirst) {
     75            ok(false, 'onstop unexpectedly fired before ondataavailable');
     76          }
     77          element.pause();
     78          manager.finished(token);
     79        };
     80 
     81        mediaRecorder.stop();
     82        is(mediaRecorder.state, 'inactive',
     83           'Media recorder is inactive after being stopped');
     84        is(mediaRecorder.stream, stream,
     85           'Media recorder stream = element stream post recording');
     86 
     87      } else if (dataAvailableCount === 2) {
     88        // Ensure we've received at least two ondataavailable events before onstop
     89        onDataAvailableFirst = true;
     90      }
     91    };
     92 
     93    mediaRecorder.start(1);
     94    element.play();
     95    is(mediaRecorder.state, 'recording', 'Media recorder should be recording');
     96    is(mediaRecorder.stream, stream,
     97       'Media recorder stream = element stream at the start of recording');
     98  };
     99 }
    100 
    101 manager.runTests(gMediaRecorderTests, startTest);
    102 </script>
    103 </pre>
    104 </body>
    105 </html>