diff options
Diffstat (limited to 'toolkit/content/tests/widgets/test_videocontrols_scrubber_position_nopreload.html')
-rw-r--r-- | toolkit/content/tests/widgets/test_videocontrols_scrubber_position_nopreload.html | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/toolkit/content/tests/widgets/test_videocontrols_scrubber_position_nopreload.html b/toolkit/content/tests/widgets/test_videocontrols_scrubber_position_nopreload.html new file mode 100644 index 0000000000..9fbb6fbcb5 --- /dev/null +++ b/toolkit/content/tests/widgets/test_videocontrols_scrubber_position_nopreload.html @@ -0,0 +1,123 @@ +<!DOCTYPE HTML> +<!-- Any copyright is dedicated to the Public Domain. + - https://creativecommons.org/publicdomain/zero/1.0/ --> +<html> +<head> + <title>Video controls test - Initial scrubber position when preload is turned off</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <script type="text/javascript" src="head.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<p id="display"></p> + +<div id="content"> + <video width="320" height="240" id="video" mozNoDynamicControls controls="true" preload="none" src="seek_with_sound.ogg"></video> +</div> + +<div id="host"></div> + +<pre id="test"> +<script class="testbody" type="text/javascript"> + +const video = document.getElementById("video"); + +add_task(function test_initial_scrubber_position() { + // Check initial state upon load + is(video.paused, true, "checking video play state"); + + const scrubber = getElementWithinVideo(video, "scrubber"); + ok(scrubber.max, "The max value should be set on the scrubber"); + is(parseInt(scrubber.value), 0, "The initial position should be 0"); +}); + +add_task(async function test_scrubber_after_manual_move() { + // Kick-start the video before trying to change the scrubber. + let loadedPromise = video.readyState == video.HAVE_ENOUGH_DATA ? + Promise.resolve() : + new Promise(r => { + video.addEventListener("canplaythrough", r, {once: true}); + }); + video.play(); + await loadedPromise; + video.pause(); + const scrubber = getElementWithinVideo(video, "scrubber"); + // Click the middle of the scrubber: + synthesizeMouseAtCenter(scrubber, {}); + // Expect that the progress updates, too: + + const progress = getElementWithinVideo(video, "progressBar"); + is( + // toFixed(2) takes care of rounding issues here. + (progress.value / progress.max).toFixed(2), + (scrubber.value / scrubber.max).toFixed(2), + "Should have updated progress bar." + ); +}); + +add_task(async function test_progress_and_scrubber_once_fullscreened() { + // loop to ensure we can always get 4 timeupdate events. + video.loop = true; + video.currentTime = video.duration / 2; + info("Setting max width"); + video.style.maxWidth = "200px"; + info( + "Current video progress = " + + (video.currentTime / video.duration).toFixed(2) + ); + // Wait for a flush so the scrubber has been hidden. + await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r))); + info("Hid progress and scrubber."); + // Then full screen. + await SpecialPowers.wrap(video).requestFullscreen(); + info("Gone into fullscreen."); + // Then wait for the video to play a bit (4 events is pretty arbitrary) + let updateCounter = 4; + let playABitPromise = new Promise(resolve => { + let handler = () => { + info("timeupdate event, counter left: " + updateCounter); + if (--updateCounter <= 0) { + video.removeEventListener("timeupdate", handler); + video.addEventListener("pause", resolve, { once: true }); + video.pause(); + } + }; + video.addEventListener("timeupdate", handler); + }); + video.play(); + await playABitPromise; + + const scrubber = getElementWithinVideo(video, "scrubber"); + let videoProgress = video.currentTime / video.duration; + let fuzzFactor = video.duration * 0.01; + info("Video progress: " + videoProgress.toFixed(3)); + let scrubberProgress = scrubber.value / scrubber.max; + info("Scrubber : " + scrubberProgress.toFixed(3)); + ok( + scrubberProgress <= videoProgress + fuzzFactor, + "Scrubber should match actual video point in time." + ); + ok( + scrubberProgress >= videoProgress - fuzzFactor, + "Scrubber should match actual video point in time." + ); + // Expect that the progress matches the scrubber: + const progress = getElementWithinVideo(video, "progressBar"); + let progressProgress = progress.value / progress.max; + info("Progress bar : " + progressProgress.toFixed(3)); + ok( + progressProgress <= videoProgress + fuzzFactor, + "Progress bar should match actual video point in time." + ); + ok( + progressProgress >= videoProgress - fuzzFactor, + "Progress bar should match actual video point in time." + ); + await SpecialPowers.wrap(document).exitFullscreen(); +}); + +</script> +</pre> +</body> +</html> |