OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <script src="/w3c/resources/testharness.js"></script> | 4 <script src="/w3c/resources/testharness.js"></script> |
5 <script src="/w3c/resources/testharnessreport.js"></script> | 5 <script src="/w3c/resources/testharnessreport.js"></script> |
6 <script src="mediasource-util.js"></script> | 6 <script src="mediasource-util.js"></script> |
7 | 7 |
8 <link rel='stylesheet' href='/w3c/resources/testharness.css'> | 8 <link rel='stylesheet' href='/w3c/resources/testharness.css'> |
9 </head> | 9 </head> |
10 <body> | 10 <body> |
(...skipping 21 matching lines...) Expand all Loading... |
32 test.done(); | 32 test.done(); |
33 }, "Test addSourceBuffer() with empty type"); | 33 }, "Test addSourceBuffer() with empty type"); |
34 | 34 |
35 mediasource_test(function(test, mediaElement, mediaSource) | 35 mediasource_test(function(test, mediaElement, mediaSource) |
36 { | 36 { |
37 assert_throws("NotSupportedError", | 37 assert_throws("NotSupportedError", |
38 function() { mediaSource.addSourceBuffer(null); }, | 38 function() { mediaSource.addSourceBuffer(null); }, |
39 "addSourceBuffer() threw an exception when passed null
."); | 39 "addSourceBuffer() threw an exception when passed null
."); |
40 test.done(); | 40 test.done(); |
41 }, "Test addSourceBuffer() with null"); | 41 }, "Test addSourceBuffer() with null"); |
42 | 42 |
43 mediasource_test(function(test, mediaElement, mediaSource) | 43 mediasource_test(function(test, mediaElement, mediaSource) |
44 { | 44 { |
45 assert_throws("NotSupportedError", | 45 assert_throws("NotSupportedError", |
46 function() { mediaSource.addSourceBuffer("invalidType"
); }, | 46 function() { mediaSource.addSourceBuffer("invalidType"
); }, |
47 "addSourceBuffer() threw an exception for an unsupport
ed type."); | 47 "addSourceBuffer() threw an exception for an unsupport
ed type."); |
48 test.done(); | 48 test.done(); |
49 }, "Test addSourceBuffer() with unsupported type"); | 49 }, "Test addSourceBuffer() with unsupported type"); |
50 | 50 |
51 mediasource_test(function(test, mediaElement, mediaSource) | 51 mediasource_test(function(test, mediaElement, mediaSource) |
52 { | 52 { |
(...skipping 30 matching lines...) Expand all Loading... |
83 var mimetype = MediaSourceUtil.VIDEO_ONLY_TYPE; | 83 var mimetype = MediaSourceUtil.VIDEO_ONLY_TYPE; |
84 | 84 |
85 assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is
supported"); | 85 assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is
supported"); |
86 | 86 |
87 var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 87 var sourceBuffer = mediaSource.addSourceBuffer(mimetype); |
88 assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 88 assert_true(sourceBuffer != null, "New SourceBuffer returned"); |
89 assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceB
uffer is in mediaSource.sourceBuffers"); | 89 assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceB
uffer is in mediaSource.sourceBuffers"); |
90 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
ffer is not in mediaSource.activeSourceBuffers"); | 90 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
ffer is not in mediaSource.activeSourceBuffers"); |
91 test.done(); | 91 test.done(); |
92 }, "Test addSourceBuffer() video only"); | 92 }, "Test addSourceBuffer() video only"); |
93 | 93 |
94 mediasource_test(function(test, mediaElement, mediaSource) | 94 mediasource_test(function(test, mediaElement, mediaSource) |
95 { | 95 { |
96 var mimetype = MediaSourceUtil.AUDIO_ONLY_TYPE; | 96 var mimetype = MediaSourceUtil.AUDIO_ONLY_TYPE; |
97 | 97 |
98 assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is
supported"); | 98 assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is
supported"); |
99 | 99 |
100 var sourceBuffer = mediaSource.addSourceBuffer(mimetype); | 100 var sourceBuffer = mediaSource.addSourceBuffer(mimetype); |
101 assert_true(sourceBuffer != null, "New SourceBuffer returned"); | 101 assert_true(sourceBuffer != null, "New SourceBuffer returned"); |
102 assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceB
uffer is in mediaSource.sourceBuffers"); | 102 assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceB
uffer is in mediaSource.sourceBuffers"); |
103 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
ffer is not in mediaSource.activeSourceBuffers"); | 103 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
ffer is not in mediaSource.activeSourceBuffers"); |
(...skipping 23 matching lines...) Expand all Loading... |
127 | 127 |
128 var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype); | 128 var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype); |
129 var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype); | 129 var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype); |
130 assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "source
BufferA is in mediaSource.sourceBuffers"); | 130 assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "source
BufferA is in mediaSource.sourceBuffers"); |
131 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
fferA is not in mediaSource.activeSourceBuffers"); | 131 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
fferA is not in mediaSource.activeSourceBuffers"); |
132 assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "source
BufferB is in mediaSource.sourceBuffers"); | 132 assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "source
BufferB is in mediaSource.sourceBuffers"); |
133 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
fferB is not in mediaSource.activeSourceBuffers"); | 133 assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBu
fferB is not in mediaSource.activeSourceBuffers"); |
134 test.done(); | 134 test.done(); |
135 }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffer
s"); | 135 }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffer
s"); |
136 | 136 |
137 mediasource_test(function(test, mediaElement, mediaSource) | 137 mediasource_testafterdataloaded(function(test, mediaElement, mediaSour
ce, segmentInfo, sourceBuffer, mediaData) |
138 { | 138 { |
139 var reachedLimit = false; | 139 test.expectEvent(sourceBuffer, "updateend"); |
| 140 sourceBuffer.appendBuffer(mediaData); |
| 141 test.waitForExpectedEvents(function() |
| 142 { |
| 143 assert_throws({name: "QuotaExceededError"}, |
| 144 function() { mediaSource.addSourceBuffer(MediaSourceUtil.A
UDIO_VIDEO_TYPE); }, |
| 145 "addSourceBuffer must throw an exception if the MediaSourc
e has already received init segments for all sourcebuffers added at the time"); |
| 146 test.done(); |
| 147 }); |
| 148 }, "Test addSourceBuffer() throws QuotaExceededError after MediaSource
has completed init."); |
140 | 149 |
141 // The 20 here is an arbitrary upper limit to make sure the test te
rminates. This test | 150 mediasource_testafterdataloaded(function(test, mediaElement, mediaSour
ce, segmentInfo, sourceBuffer, mediaData) |
142 // assumes that implementations won't support more than 20 SourceBu
ffers simultaneously. | 151 { |
143 for (var i = 0; i < 20; ++i) { | 152 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, se
gmentInfo.init); |
144 try { | 153 test.expectEvent(sourceBuffer, "updateend"); |
145 mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYP
E); | 154 // Append incomplete init segment to the first SourceBuffer. |
146 } catch(e) { | 155 sourceBuffer.appendBuffer(initSegment.slice(0, initSegment.length
- 1)); |
147 assert_equals(e.name, "QuotaExceededError"); | 156 test.waitForExpectedEvents(function() |
148 reachedLimit = true; | 157 { |
149 break; | 158 // We have not added a full init segment for the first SourceB
uffer yet, so MediaSource init is not yet |
150 } | 159 // finished and we should be able to add/remove one more Sourc
eBuffer. |
151 } | 160 var sourceBuffer2 = mediaSource.addSourceBuffer(MediaSourceUti
l.AUDIO_VIDEO_TYPE); |
152 assert_true(reachedLimit, "Reached SourceBuffer limit."); | 161 mediaSource.removeSourceBuffer(sourceBuffer2); |
153 test.done(); | 162 |
154 }, "Test addSourceBuffer() QuotaExceededError."); | 163 // Now append the rest of the init segment, this should comple
te the initialization of the MediaSource. |
| 164 test.expectEvent(sourceBuffer, "updateend"); |
| 165 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement
metadata."); |
| 166 sourceBuffer.appendBuffer(initSegment.slice(initSegment.length
- 1)); |
| 167 }); |
| 168 |
| 169 test.waitForExpectedEvents(function() |
| 170 { |
| 171 // MediaSource is fully initialized now, so adding new SourceB
uffers is no longer possible. |
| 172 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_M
ETADATA); |
| 173 assert_throws({name: "QuotaExceededError"}, |
| 174 function() { mediaSource.addSourceBuffer(MediaSourceUtil.A
UDIO_VIDEO_TYPE); }, |
| 175 "addSourceBuffer must throw an exception if the media elem
ent has already reached HAVE_METADATA"); |
| 176 test.done(); |
| 177 }); |
| 178 }, "Test addSourceBuffer() succeeds while incomplete init segment is a
ppended, fails after MediaSource init completed."); |
155 </script> | 179 </script> |
156 </body> | 180 </body> |
157 </html> | 181 </html> |
OLD | NEW |