tor-browser

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

test_cloneElementVisually_no_suspend.html (2583B)


      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>Original</h1>
     13  <video id="original"></video>
     14  <h1>MediaStream</h1>
     15  <video id="streamTarget"></video>
     16  <h1>Clone</h1>
     17 </div>
     18 <div id="results">
     19  <h1>Results</h1>
     20  <canvas id="left"></canvas>
     21  <canvas id="right"></canvas>
     22 </div>
     23 
     24 <script type="application/javascript">
     25 
     26 /* import-globals-from cloneElementVisually_helpers.js */
     27 
     28 /**
     29 * Tests that cloning a video prevents the decoder from being suspended
     30 * if the original video stops being visible.
     31 */
     32 add_task(async () => {
     33  await setup();
     34 
     35  let originalVideo = document.getElementById("original");
     36  await setVideoSrc(originalVideo, LONG_VIDEO);
     37 
     38  await originalVideo.play();
     39 
     40  // Ensure that hiding and pausing this video will cause us to
     41  // try suspending it.
     42  await ensureVideoSuspendable(originalVideo);
     43 
     44  await withNewClone(originalVideo, async clone => {
     45    SpecialPowers.wrap(originalVideo).cloneElementVisually(clone);
     46 
     47    // Go back to the beginning of the video to give us enough time to
     48    // fail to suspend the video when it's being cloned before the
     49    // video ends.
     50    originalVideo.removeAttribute("loop");
     51    originalVideo.currentTime = 0;
     52    await waitForEventOnce(originalVideo, "seeked");
     53 
     54    let suspendTimerFired = false;
     55 
     56    let listener = () => {
     57      suspendTimerFired = true;
     58    }
     59    originalVideo.addEventListener("mozstartvideosuspendtimer", listener);
     60 
     61    // Have to do this to access normally-preffed off binding methods for some
     62    // reason.
     63    // See bug 1544257.
     64    SpecialPowers.wrap(originalVideo).setVisible(false);
     65 
     66    await waitForEventOnce(originalVideo, "ended");
     67 
     68    originalVideo.removeEventListener("mozstartvideosuspendtimer", listener);
     69 
     70    ok(!suspendTimerFired,
     71       "mozstartvideosuspendtimer should not have fired.");
     72 
     73    // Have to do this to access normally-preffed off binding methods for some
     74    // reason.
     75    // See bug 1544257.
     76    SpecialPowers.wrap(originalVideo).setVisible(true);
     77  });
     78 
     79  await originalVideo.play();
     80 
     81  // With the clone gone, the original video should be able to suspend now.
     82  await ensureVideoSuspendable(originalVideo);
     83 
     84  await setVideoSrc(originalVideo, TEST_VIDEO_1);
     85 });
     86 
     87 </script>
     88 
     89 </body>
     90 </html>