4 <script src="/media-resources/video-test.js"></script>
5 <script src="/media/resources/media-source/webm/segment-info.js"></script>
6 <script src="webkitmediasource-util.js"></script>
8 var segmentHelper = new MediaSourceTest.SegmentHelper(WebMSegmentInfo.testWebM, true);
9 var defaultSourceMimetype = segmentHelper.segmentInfo.type;
11 function expectExceptionOnSetDuration(value, error)
14 mediaSource.duration = value;
15 failTest("Expected an exception");
17 if (!(e.code == error)) {
18 failTest("Unexpected exception " + e);
21 consoleWrite("Got expected exception " + e);
25 function testExpectExceptionOnSetDurationWhenClosed(mediaSource)
27 consoleWrite("Test setting the duration when closed.");
28 expectExceptionOnSetDuration(10, DOMException.INVALID_STATE_ERR);
31 function testExpectNaNOnGetDurationWhenClosed(mediaSource)
33 consoleWrite("Test getting the duration when closed.");
34 if (!isNaN(mediaSource.duration))
35 failTest("Unexpected duration value. Expected NaN got " + mediaSource.duration);
38 function testExpectExceptionOnNegativeDuration(runNextTestCase, videoTag)
40 expectExceptionOnSetDuration(-1, DOMException.INVALID_ACCESS_ERR);
44 function testExpectExceptionOnNaNDuration(runNextTestCase, videoTag)
46 expectExceptionOnSetDuration(NaN, DOMException.INVALID_ACCESS_ERR);
50 function testDurationChange(runNextTestCase, videoTag)
52 segmentHelper.addSourceBuffer();
53 segmentHelper.appendInitSegment();
55 waitForEventOnce('loadedmetadata', function() {
56 waitForEventOnce('durationchange', function() {
57 MediaSourceTest.expectDuration(videoTag, mediaSource, 10);
58 var expected_buffered = [];
59 for (var i = 0; i < mediaSource.sourceBuffers.length; i++)
60 MediaSourceTest.expectBufferedRange(mediaSource.sourceBuffers[i], expected_buffered);
62 }, false, false, videoTag);
63 mediaSource.duration = 10;
65 }, false, false, videoTag);
68 function testDurationChangeThenOverwriteDuration(runNextTestCase, videoTag)
70 segmentHelper.addSourceBuffer();
71 segmentHelper.appendInitSegment();
73 waitForEventOnce('loadedmetadata', function() {
74 waitForEventOnce('durationchange', function() {
75 MediaSourceTest.expectDuration(videoTag, mediaSource, 1);
77 waitForEventOnce('durationchange', function() {
78 MediaSourceTest.expectDuration(videoTag, mediaSource, 1.593);
79 var expected_buffered = [[0, 1.593]];
80 for (var i = 0; i < mediaSource.sourceBuffers.length; i++)
81 MediaSourceTest.expectBufferedRange(mediaSource.sourceBuffers[i], expected_buffered);
83 }, false, false, videoTag);
84 var segments = segmentHelper.segmentInfo.media;
85 for (var i = 0; i < segments.length; i++) {
86 segmentHelper.appendMediaSegment(i);
87 // Stop appending after exceeding 1s.
88 if (segments[i].timecode > 1)
92 }, false, false, videoTag);
93 mediaSource.duration = 1;
95 }, false, false, videoTag);
98 function testDurationChangeTruncates(runNextTestCase, videoTag)
100 segmentHelper.addSourceBuffer();
101 segmentHelper.appendInitSegment();
103 waitForEventOnce('loadedmetadata', function() {
104 segmentHelper.appendAllMediaSegments();
105 var segmentDuration = segmentHelper.segmentInfo.duration;
106 MediaSourceTest.expectDuration(videoTag, mediaSource, segmentDuration);
108 waitForEventOnce('durationchange', function() {
109 MediaSourceTest.expectDuration(videoTag, mediaSource, 2);
110 var expected_buffered = [[0,2]];
111 for (var i = 0; i < mediaSource.sourceBuffers.length; i++)
112 MediaSourceTest.expectBufferedRange(mediaSource.sourceBuffers[i], expected_buffered);
114 }, false, false, videoTag);
116 mediaSource.duration = 2;
118 }, false, false, videoTag);
125 mediaSource = new WebKitMediaSource();
126 waitForEvent('webkitsourceopen', "", false, false, mediaSource);
128 testExpectExceptionOnSetDurationWhenClosed(mediaSource);
129 testExpectNaNOnGetDurationWhenClosed(mediaSource);
131 segmentHelper.init(video, function(success) {
133 failTest("Failed to load segment data");
138 testExpectExceptionOnNegativeDuration,
139 testExpectExceptionOnNaNDuration,
141 testDurationChangeThenOverwriteDuration,
142 testDurationChangeTruncates,
144 MediaSourceTest.startSourceOpenTesting(video, testCases);
149 <body onload="onLoad()">
151 <p>Tests duration attribute on MediaSource object</p>