| <!DOCTYPE html> |
| <title>Test media element's "played" attribute and range collapse.</title> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="media-file.js"></script> |
| <script src="video-played.js"></script> |
| <video></video> |
| <script> |
| var video; |
| async_test(function(t) { |
| var expectedStartTimes = []; |
| var expectedEndTimes = []; |
| video = document.querySelector("video"); |
| |
| video.oncanplay = t.step_func(function() { |
| video.oncanplay = null; |
| testRanges(expectedStartTimes, expectedEndTimes); |
| // Test playing when there are no ranges. |
| timeRangeCount = currentTimeRange = 0; |
| video.currentTime = 0.5; |
| currentTimeRange++; |
| startPlayingInNewRange(t, expectedStartTimes); |
| }); |
| waitForPauseAndContinue(t, createANewRange, false, expectedStartTimes, expectedEndTimes); |
| |
| function createANewRange() { |
| // Create a new range. |
| var newTime = (video.played.end(0) + 0.05).toFixed(2); |
| video.currentTime = newTime; |
| startPlayingInNewRange(t, expectedStartTimes); |
| waitForPauseAndContinue(t, jumpAndCollapseTwoRanges, false, expectedStartTimes, expectedEndTimes); |
| } |
| |
| function jumpAndCollapseTwoRanges() { |
| // Test playing from one range into another, should collapse the two ranges. |
| timeRangeCount--; |
| currentTimeRange = timeRangeCount - 1; |
| expectedStartTimes[0] = (expectedStartTimes[0] - 0.1).toFixed(2); |
| expectedEndTimes[0] = expectedEndTimes[1]; |
| video.currentTime = expectedStartTimes[0]; |
| playForDuration(expectedEndTimes[1] - expectedStartTimes[0], t); |
| waitForPauseAndContinue(t, testLoopingAndPassToTheEnd, false, expectedStartTimes, expectedEndTimes); |
| } |
| |
| function testLoopingAndPassToTheEnd() { |
| // Start playing near the end of the movie so it will loop quickly. |
| video.loop = true; |
| var startTime = (video.duration - 0.05).toFixed(2); |
| video.currentTime = startTime; |
| |
| // We will end in the very first time range |
| currentTimeRange = 0; |
| |
| // Playing from near the end so we will create a new time range from startTime, duration. |
| timeRangeCount++; |
| expectedStartTimes[timeRangeCount - 1] = startTime; |
| expectedEndTimes[timeRangeCount - 1] = video.duration.toFixed(2); |
| |
| // Playback restarts from beginning, so expect the beginning of first time range to be 0. |
| expectedStartTimes[0] = "0.00"; |
| // Have to play for long enough to loop and play into the existing range. |
| playForDuration(1.25, t); |
| waitForPauseAndContinue(t, null, true, expectedStartTimes, expectedEndTimes); |
| } |
| |
| video.src = findMediaFile("video", "content/test"); |
| }); |
| </script> |