| 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 |