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>