Index: third_party/WebKit/LayoutTests/media/video-loop.html |
diff --git a/third_party/WebKit/LayoutTests/media/video-loop.html b/third_party/WebKit/LayoutTests/media/video-loop.html |
index 3cdfbda37309351849989db4a0350b62c322b77b..4aee3df7b6d0f0ed13f49746c41639f29ede1123 100644 |
--- a/third_party/WebKit/LayoutTests/media/video-loop.html |
+++ b/third_party/WebKit/LayoutTests/media/video-loop.html |
@@ -1,124 +1,73 @@ |
<!DOCTYPE html> |
-<html> |
- <head> |
- <script src=media-file.js></script> |
- <!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956 |
- (Please avoid writing new tests using video-test.js) --> |
- <script src=video-test.js></script> |
- |
- <script> |
- var seekCount = 0; |
- var playCount = 0; |
- |
- function play() |
- { |
- if (video.readyState < HTMLMediaElement.HAVE_METADATA) { |
- setTimeout(play, 100); |
- return; |
- } |
- |
- if (++playCount > 1) |
- return; |
- |
- consoleWrite("<br><em>++ seek to near the end, wait for 'seeked' event to announce loop.</em>"); |
- testExpected("video.paused", false); |
- |
- // Pause playback so the movie can't possibly loop before the seeked event fires |
- run("video.pause()"); |
- waitForEvent("seeked", seeked); |
- run("video.currentTime = video.duration - 0.4"); |
- consoleWrite(""); |
- } |
- |
- function seeked() |
- { |
- switch (++seekCount) |
- { |
- case 1: |
- consoleWrite("<br><em>++ first seek completed, beginning playback.</em>"); |
- testExpected("video.paused", true); |
- testExpected("video.ended", false); |
- run("video.play()"); |
- consoleWrite(""); |
- break; |
- case 2: |
- consoleWrite("<br><em>++ second seek completed because video looped, toggle 'loop' and seek to near end again.</em>"); |
- testExpected("video.paused", false); |
- testExpected("video.ended", false); |
- run("video.pause()"); |
- |
- testExpected("mediaElement.currentTime", 0, '>='); |
- |
- // don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines |
- reportExpected(mediaElement.currentTime < mediaElement.duration, "mediaElement.currentTime", "<", "mediaElement.duration", mediaElement.currentTime); |
- run("video.loop = false"); |
- run("video.currentTime = video.duration - 0.4"); |
- consoleWrite(""); |
- break; |
- case 3: |
- consoleWrite("<br><em>++ third seek completed, beginning playback for the last time.</em>"); |
- testExpected("video.paused", true); |
- testExpected("video.ended", false); |
- run("video.play()"); |
- consoleWrite(""); |
- break; |
- default: |
- failTest("Video should have only seeked three times."); |
- break; |
- |
- } |
+<title>Test video looping.</title> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="media-file.js"></script> |
+<video autoplay></video> |
+<script> |
+// Test looping by: |
+// Play to end with "loop" set to true. |
+// When "seeked" event fires, verify that time has jumped back and movie is playing. |
+// Set "loop" to false and play again. |
+// Verify that "ended" event fires. |
+async_test(function(t) { |
+ var video = document.querySelector("video"); |
+ // Test setting/removing the attribute. |
+ assert_equals(video.getAttribute("loop"), null); |
+ assert_false(video.loop); |
+ |
+ video.loop = true; |
+ assert_true(video.loop); |
+ assert_not_equals(video.getAttribute("loop"), null); |
+ |
+ video.removeAttribute("loop"); |
+ assert_false(video.loop); |
+ |
+ video.onplay = t.step_func(function() { |
+ video.onplay = null; |
+ assert_false(video.paused); |
+ |
+ // Pause playback so the movie can't possibly loop before the seeked event fires. |
+ video.pause(); |
+ // seek to near the end, wait for "seeked" event to announce loop. |
+ var seekCount = 0; |
+ video.onseeked = t.step_func(function() { |
+ switch (++seekCount) { |
+ case 1: |
+ // first seek completed, beginning playback. |
+ assert_true(video.paused); |
+ assert_false(video.ended); |
+ video.play(); |
+ break; |
+ case 2: |
+ // second seek completed because video looped, toggle "loop" and seek to near end again. |
+ assert_false(video.paused); |
+ assert_false(video.ended); |
+ video.pause(); |
+ assert_greater_than_equal(video.currentTime, 0); |
+ assert_less_than(video.currentTime, video.duration); |
+ video.loop = false; |
+ video.currentTime = video.duration - 0.4; |
+ break; |
+ case 3: |
+ // third seek completed, beginning playback for the last time. |
+ assert_true(video.paused); |
+ assert_false(video.ended); |
+ video.play(); |
+ break; |
} |
+ }); |
- function ended() |
- { |
- consoleWrite("<br><em>++ played to end and stopped.</em>"); |
- testExpected("video.ended", true); |
+ video.currentTime = video.duration - 0.4; |
+ }); |
- // don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines |
- reportExpected(mediaElement.currentTime == mediaElement.duration, "mediaElement.currentTime", "==", "mediaElement.duration", mediaElement.currentTime); |
- |
- consoleWrite(""); |
- endTest(); |
- } |
- |
- function start() |
- { |
- findMediaElement(); |
- |
- consoleWrite("<em>++ Test setting/removing the attribute.</em>"); |
- testExpected("video.getAttribute('loop')", null); |
- testExpected("video.loop", false); |
- |
- run("video.loop = true"); |
- testExpected("video.loop", true); |
- testExpected("video.getAttribute('loop')", null, "!="); |
- |
- run("video.removeAttribute('loop')"); |
- testExpected("video.loop", false); |
- |
- waitForEvent('pause'); |
- waitForEvent('play', play); |
- waitForEvent("ended", ended); |
- |
- consoleWrite("<br><em>++ Set 'loop' to true and begin playing.</em>"); |
- var mediaFile = findMediaFile("video", "content/test"); |
- run("video.loop = true"); |
- video.src = mediaFile; |
- consoleWrite(""); |
- } |
- </script> |
+ video.onended = t.step_func_done(function() { |
+ assert_true(video.ended); |
+ assert_equals(video.currentTime, video.duration); |
+ }); |
- </head> |
- <body> |
- <video controls autoplay ></video> |
- <p><b>Test looping by:</b> |
- <ol> |
- <li>Play to end with 'loop' set to true.</li> |
- <li>When 'seeked' event fires, verify that time has jumped back and movie is playing.</li> |
- <li>Set 'loop' to false and play again.</li> |
- <li>Verify that 'ended' event fires.</li> |
- </ol> |
- </p> |
- <script>start()</script> |
- </body> |
-</html> |
+ // Set "loop" to true and begin playing. |
+ video.loop = true; |
+ video.src = findMediaFile("video", "content/test"); |
+}); |
+</script> |