File's structured serialization should serialize lastModified attribute
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / media-source / mediasource-seekable.html
1 <!DOCTYPE html>
2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
3 <meta charset="utf-8">
4 <script src="/resources/testharness.js"></script>
5 <script src="/resources/testharnessreport.js"></script>
6 <script src="mediasource-util.js"></script>
7 <script>
8     mediasource_test(function(test, mediaElement, mediaSource)
9     {
10         mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
11         mediaElement.addEventListener('ended', test.step_func_done(function () {}));
12
13         var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
14
15         assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');
16         test.done();
17     }, 'Get seekable time ranges when the sourcebuffer is empty.');
18
19     mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
20     {
21         var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
22         test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration');
23         sourceBuffer.appendBuffer(initSegment);
24         test.waitForExpectedEvents(function()
25         {
26             assert_equals(mediaElement.duration, segmentInfo.duration);
27             assertSeekableEquals(mediaElement, '{ [0.000, ' + segmentInfo.duration.toFixed(3) + ') }', 'mediaElement.seekable');
28             test.done();
29         });
30     }, 'Get seekable time ranges after init segment received.');
31
32     mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
33     {
34         var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
35         test.expectEvent(mediaElement, 'durationchange', 'mediaElement got duration after initsegment');
36         test.expectEvent(sourceBuffer, 'update');
37         test.expectEvent(sourceBuffer, 'updateend');
38         sourceBuffer.appendBuffer(initSegment);
39         test.waitForExpectedEvents(function()
40         {
41             assert_false(sourceBuffer.updating, "updating attribute is false");
42             test.expectEvent(mediaElement, 'durationchange', 'mediaElement got infinity duration');
43             mediaSource.duration = Infinity;
44             test.waitForExpectedEvents(function()
45             {
46                 assertSeekableEquals(mediaElement, '{ }', 'mediaElement.seekable');
47
48                 // Append a segment from the middle of the stream to make sure that seekable does not use buffered.start(0) or duration as first or last value
49                 var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[2]);
50                 test.expectEvent(sourceBuffer, 'update');
51                 test.expectEvent(sourceBuffer, 'updateend');
52                 sourceBuffer.appendBuffer(midSegment);
53                 test.waitForExpectedEvents(function()
54                 {
55                     assert_equals(mediaElement.seekable.length, 1, 'mediaElement.seekable.length');
56                     assert_equals(mediaElement.buffered.length, 1, 'mediaElement.buffered.length');
57                     assert_not_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0));
58                     assert_equals(mediaElement.seekable.start(0), 0);
59                     assert_not_equals(mediaElement.seekable.end(0), mediaElement.duration);
60                     assert_not_equals(mediaElement.seekable.end(0), mediaElement.buffered.start(0));
61                     assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0));
62                     test.done();
63                 });
64             });
65         });
66     }, 'Get seekable time ranges on an infinite stream.');
67 </script>