| <!DOCTYPE html> |
| <title>Test video looping.</title> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.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; |
| } |
| }); |
| |
| video.currentTime = video.duration - 0.4; |
| }); |
| |
| video.onended = t.step_func_done(function() { |
| assert_true(video.ended); |
| assert_equals(video.currentTime, video.duration); |
| }); |
| |
| // Set "loop" to true and begin playing. |
| video.loop = true; |
| video.src = "content/test.ogv"; |
| }); |
| </script> |