Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / media / media-source / mediasource-seek-beyond-duration.html
1 <!DOCTYPE html>
2 <html>
3     <head>
4         <script src="/w3c/resources/testharness.js"></script>
5         <script src="/w3c/resources/testharnessreport.js"></script>
6         <script src="mediasource-util.js"></script>
7         <link rel="stylesheet" href="/w3c/resources/testharness.css">
8     </head>
9     <body>
10         <div id="log"></div>
11         <script>
12
13             function seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, seekToTime)
14             {
15                 assert_less_than(mediaElement.currentTime, mediaElement.duration, 'Not at the end yet.');
16                 test.expectEvent(mediaElement, 'seeking', 'mediaElement seeking');
17                 // Seek to specified time.
18                 mediaElement.currentTime = seekToTime;
19                 if (seekToTime >= mediaSource.duration) {
20                     assert_equals(mediaElement.currentTime, mediaSource.duration, 'Current time equals duration.');
21                 } else {
22                     assert_equals(mediaElement.currentTime, seekToTime, 'Current time equals specified seek time.');
23                 }
24
25                 test.waitForExpectedEvents(function()
26                 {
27                     test.expectEvent(mediaElement, 'timeupdate', 'mediaElement time updated.');
28                     test.expectEvent(mediaElement, 'seeked', 'mediaElement seeked');
29                     test.expectEvent(mediaElement, 'ended', 'mediaElement ended.');
30                     test.expectEvent(mediaSource, 'sourceended', 'mediaSource ended.');
31                     mediaSource.endOfStream();
32                     assert_true(mediaElement.seeking, 'mediaElement seeking.');
33                 });
34
35                 test.waitForExpectedEvents(function()
36                 {
37                     assert_equals(mediaElement.currentTime, mediaSource.duration, 'Current time equals duration.');
38                     test.done();
39                 });
40             };
41
42             mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
43             {
44                 mediaElement.play();
45                 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
46
47                 // Append the initialization segment to trigger a transition to HAVE_METADATA.
48                 test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
49                 test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
50                 sourceBuffer.appendBuffer(initSegment);
51
52                 test.waitForExpectedEvents(function()
53                 {
54                     // Add sufficient segments to have at least 2s of play-time.
55                     var playbackData = MediaSourceUtil.getMediaDataForPlaybackTime(mediaData, segmentInfo, 2.0);
56                     test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
57                     test.expectEvent(mediaElement, 'playing', 'Playing media.');
58                     sourceBuffer.appendBuffer(playbackData);
59                 });
60
61                 test.waitForExpectedEvents(function()
62                 {
63                     assert_equals(mediaElement.duration, segmentInfo.durationInInitSegment);
64                     assert_greater_than_equal(mediaElement.duration, 2.0, 'Duration is >2.0s.');
65                     test.waitForCurrentTimeChange(mediaElement, function()
66                     {
67                         // Update duration.
68                         mediaSource.duration = 1.5;
69                         seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, 1.8);
70                     });
71                 });
72             }, 'Test seeking beyond updated media duration.');
73
74             mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
75             {
76                 mediaElement.play();
77
78                 // Append all media data for complete playback.
79                 test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
80                 test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
81                 test.expectEvent(mediaElement, 'playing', 'Playing media.');
82                 sourceBuffer.appendBuffer(mediaData);
83
84                 test.waitForExpectedEvents(function()
85                 {
86                     test.waitForCurrentTimeChange(mediaElement, function()
87                     {
88                         seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, mediaSource.duration, mediaSource.duration + 0.1);
89                     });
90                 });
91
92             }, 'Test seeking beyond media duration.');
93         </script>
94     </body>
95 </html>