tor-browser

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

test_streams_tracks.html (2014B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test MediaStreamTrack interfaces</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 const manager = new MediaTestManager;
     13 
     14 function testTracks(tracks, hasTrack, kind, src) {
     15  is(tracks.length, hasTrack ? 1 : 0, `Correct ${kind} track count for ${src}`);
     16  for (const track of tracks) {
     17    is(track.readyState, "live", `Track ${track.id} should still be live`);
     18    is(track.kind, kind, `Correct track kind for track ${track.id} of ${src}`);
     19    ok(/\{........-....-....-....-............\}/.test(track.id),
     20      `id ${track.id} for ${track.kind} track of ${src} has correct form`);
     21  }
     22 }
     23 
     24 async function startTest(test, token) {
     25  try {
     26    info(`Starting test of ${test.name}`);
     27    const element = document.createElement("video");
     28 
     29    element.token = token;
     30    manager.started(token);
     31 
     32    element.src = test.name;
     33    element.test = test;
     34    const stream = element.mozCaptureStreamUntilEnded();
     35 
     36    element.play();
     37 
     38    await new Promise(r => element.onloadedmetadata = r);
     39 
     40    testTracks(stream.getAudioTracks(), test.hasAudio, "audio", test.name);
     41    testTracks(stream.getVideoTracks(), test.hasVideo, "video", test.name);
     42    const tracks = stream.getTracks();
     43 
     44    await new Promise(r => element.onended = r);
     45 
     46    for (let i = 0; i < tracks.length; ++i) {
     47      await Promise.race(
     48        tracks.map(t => new Promise(r => t.onended = r))
     49      );
     50      await new Promise(r => stream.onremovetrack = r);
     51    }
     52 
     53    testTracks(stream.getAudioTracks(), false, "audio", test.name);
     54    testTracks(stream.getVideoTracks(), false, "video", test.name);
     55  } catch(e) {
     56    ok(false, `Caught error: ${e}`);
     57  } finally {
     58    manager.finished(token);
     59  }
     60 }
     61 
     62 manager.runTests(gTrackTests, startTest);
     63 </script>
     64 </pre>
     65 </body>
     66 </html>