tor-browser

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

test_mediarecorder_avoid_recursion.html (1978B)


      1 <html>
      2 <head>
      3  <title>MediaRecorder infinite recursion with requestData() calls in "dataavailable" event</title>
      4  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      6  <script type="text/javascript" src="manifest.js"></script>
      7  <script type="text/javascript" src="gUM_support.js"></script>
      8 </head>
      9 <body>
     10 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=897776">Mozill
     11 a Bug 897776</a>
     12 <pre id="test">
     13 <script class="testbody" type="text/javascript">
     14 async function startTest() {
     15  try {
     16    await setupGetUserMediaTestPrefs();
     17    let stream = await navigator.mediaDevices.getUserMedia({audio: true});
     18    let mediaRecorder = new MediaRecorder(stream);
     19    let count = 0;
     20    mediaRecorder.onerror = function () {
     21      ok(false, 'Unexpected onerror callback fired');
     22      SimpleTest.finish();
     23    };
     24    mediaRecorder.onwarning = function () {
     25      ok(false, 'Unexpected onwarning callback fired');
     26    };
     27    mediaRecorder.ondataavailable = function (e) {
     28      ++count;
     29      info("got ondataavailable data size = " + e.data.size);
     30      // no more requestData() to prevent busy main thread from starving
     31      // the encoding thread
     32      if (count == 30) {
     33        info("track.stop");
     34        stream.getTracks()[0].stop();
     35      } else if (count < 30 && mediaRecorder.state == 'recording') {
     36        info("requestData again");
     37        mediaRecorder.requestData();
     38      }
     39    };
     40    mediaRecorder.onstop = function () {
     41      ok(true, "requestData within ondataavailable successfully avoided infinite recursion");
     42      SimpleTest.finish();
     43    };
     44    mediaRecorder.start();
     45    info("mediaRecorder start");
     46    mediaRecorder.requestData();
     47    info("mediaRecorder requestData");
     48  } catch (e) {
     49    ok(false, 'Unexpected error fired with: ' + e);
     50    SimpleTest.finish();
     51  }
     52 }
     53 
     54 SimpleTest.waitForExplicitFinish();
     55 startTest();
     56 
     57 </script>
     58 </pre>
     59 </body>
     60 </html>