tor-browser

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

test_cloneElementVisually_mediastream_multitrack.html (2732B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test cloneElementVisually</title>
      6  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      7  <script type="application/javascript" src="https://example.com:443/tests/dom/media/test/cloneElementVisually_helpers.js"></script>
      8  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
      9 </head>
     10 <body>
     11 <div id="content">
     12  <h1>Originals</h1>
     13  <div id="originalContainer"></div>
     14  <canvas id="canvas"></canvas>
     15  <h1>MediaStream</h1>
     16  <div id="streamTargetContainer"></div>
     17  <h1>Clone</h1>
     18 </div>
     19 <div id="results">
     20  <h1>Results</h1>
     21  <canvas id="left"></canvas>
     22  <canvas id="right"></canvas>
     23 </div>
     24 
     25 <script type="application/javascript">
     26 
     27 /* import-globals-from cloneElementVisually_helpers.js */
     28 
     29 /**
     30 * Test that a clone of a video that is playing a MediaStream properly tracks
     31 * the selected video track.
     32 */
     33 add_task(async () => {
     34  await SpecialPowers.pushPrefEnv({
     35    set: [
     36      ["media.track.enabled", true],
     37    ],
     38  });
     39 
     40  let originalVideo = document.createElement("video");
     41  originalVideo.id = "original";
     42  document.getElementById("originalContainer").appendChild(originalVideo);
     43 
     44  let streamTarget = document.createElement("video");
     45  document.getElementById("streamTargetContainer").appendChild(streamTarget);
     46 
     47  await setup();
     48 
     49  let [track1] = originalVideo.mozCaptureStream().getTracks();
     50  let playingPromise = waitForEventOnce(originalVideo, "playing");
     51  await originalVideo.play();
     52  await playingPromise;
     53 
     54  let canvas = document.getElementById("canvas");
     55  canvas.width = originalVideo.videoWidth / 2;
     56  canvas.height = originalVideo.videoHeight / 2;
     57  let ctx = canvas.getContext("2d");
     58  let [track2] = canvas.captureStream().getTracks();
     59  ctx.fillStyle = "green";
     60  ctx.fillRect(0, 0, canvas.width, canvas.height);
     61 
     62  streamTarget.srcObject = new MediaStream([track1, track2]);
     63  playingPromise = waitForEventOnce(streamTarget, "playing");
     64  await streamTarget.play();
     65  await playingPromise;
     66 
     67  await withNewClone(originalVideo, async clone => {
     68    SpecialPowers.wrap(streamTarget).cloneElementVisually(clone);
     69 
     70    let selectedTrackIdx = streamTarget.videoTracks.selectedIndex;
     71    streamTarget.videoTracks[++selectedTrackIdx % 2].selected = true;
     72    await waitForEventOnce(streamTarget, "resize");
     73 
     74    ok(await assertVideosMatch(streamTarget, clone),
     75       "Should match MediaStream");
     76  });
     77 
     78  // Capturing a stream from a video "taints" it which prevents testing
     79  // shutdown decoder behaviour. To avoid interfering with future tests,
     80  // we replace the video.
     81  let newVideo = originalVideo.cloneNode();
     82  originalVideo.parentNode.replaceChild(newVideo, originalVideo);
     83 });
     84 
     85 </script>
     86 
     87 </body>
     88 </html>