| 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 <link rel='stylesheet' href='/w3c/resources/testharness.css'> | 7 <link rel='stylesheet' href='/w3c/resources/testharness.css'> |
| 8 </head> | 8 </head> |
| 9 <body> | 9 <body> |
| 10 <div id="log"></div> | 10 <div id="log"></div> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 { | 25 { |
| 26 testFunction(test, mediaElement, mediaSource, segmentInf
o, sourceBuffer, mediaData); | 26 testFunction(test, mediaElement, mediaSource, segmentInf
o, sourceBuffer, mediaData); |
| 27 }); | 27 }); |
| 28 }, description); | 28 }, description); |
| 29 } | 29 } |
| 30 | 30 |
| 31 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 31 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 32 { | 32 { |
| 33 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.media[0]); | 33 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.media[0]); |
| 34 | 34 |
| 35 test.expectEvent(sourceBuffer, "error", "sourceBuffer error."); |
| 35 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); | 36 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); |
| 36 test.expectEvent(mediaElement, "error", "mediaElement error."); | 37 test.expectEvent(mediaElement, "error", "mediaElement error."); |
| 38 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); |
| 37 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); | 39 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); |
| 38 sourceBuffer.appendBuffer(mediaSegment); | 40 sourceBuffer.appendBuffer(mediaSegment); |
| 39 | 41 |
| 40 test.waitForExpectedEvents(function() | 42 test.waitForExpectedEvents(function() |
| 41 { | 43 { |
| 42 assert_true(mediaElement.error != null); | 44 assert_true(mediaElement.error != null); |
| 43 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); | 45 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); |
| 44 | 46 |
| 45 assert_equals(mediaSource.sourceBuffers.length, 0); | 47 assert_equals(mediaSource.sourceBuffers.length, 0); |
| 46 assert_equals(mediaSource.readyState, "closed"); | 48 assert_equals(mediaSource.readyState, "closed"); |
| 47 test.done(); | 49 test.done(); |
| 48 }); | 50 }); |
| 49 }, "Appending media segment before the first initialization segment.
"); | 51 }, "Appending media segment before the first initialization segment.
"); |
| 50 | 52 |
| 51 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 53 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 52 { | 54 { |
| 53 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); | 55 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); |
| 54 | 56 |
| 57 // Fail if the append error algorithm occurs, since the decode |
| 58 // error will be provided by us directly via endOfStream(). |
| 59 sourceBuffer.addEventListener("error", test.unreached_func("'err
or' should not be fired on sourceBuffer")); |
| 60 |
| 55 test.expectEvent(mediaElement, "error", "mediaElement error."); | 61 test.expectEvent(mediaElement, "error", "mediaElement error."); |
| 56 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); | 62 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); |
| 57 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); | 63 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); |
| 58 | 64 |
| 59 mediaSource.endOfStream("decode"); | 65 mediaSource.endOfStream("decode"); |
| 60 | 66 |
| 61 test.waitForExpectedEvents(function() | 67 test.waitForExpectedEvents(function() |
| 62 { | 68 { |
| 63 assert_true(mediaElement.error != null); | 69 assert_true(mediaElement.error != null); |
| 64 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); | 70 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); |
| 65 | 71 |
| 66 assert_equals(mediaSource.sourceBuffers.length, 0); | 72 assert_equals(mediaSource.sourceBuffers.length, 0); |
| 67 assert_equals(mediaSource.readyState, "closed"); | 73 assert_equals(mediaSource.readyState, "closed"); |
| 68 test.done(); | 74 |
| 75 // Give a short time for a broken implementation to errantly
fire |
| 76 // "error" on sourceBuffer. |
| 77 test.step_timeout(test.step_func_done(), 0); |
| 69 }); | 78 }); |
| 70 }, "Signaling 'decode' error via endOfStream() before initialization
segment has been appended."); | 79 }, "Signaling 'decode' error via endOfStream() before initialization
segment has been appended."); |
| 71 | 80 |
| 72 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 81 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 73 { | 82 { |
| 74 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); | 83 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); |
| 75 | 84 |
| 85 // Fail if the append error algorithm occurs, since the network |
| 86 // error will be provided by us directly via endOfStream(). |
| 87 sourceBuffer.addEventListener("error", test.unreached_func("'err
or' should not be fired on sourceBuffer")); |
| 88 |
| 76 test.expectEvent(mediaElement, "error", "mediaElement error."); | 89 test.expectEvent(mediaElement, "error", "mediaElement error."); |
| 77 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); | 90 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); |
| 78 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); | 91 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed
."); |
| 79 | 92 |
| 80 mediaSource.endOfStream("network"); | 93 mediaSource.endOfStream("network"); |
| 81 | 94 |
| 82 test.waitForExpectedEvents(function() | 95 test.waitForExpectedEvents(function() |
| 83 { | 96 { |
| 84 assert_true(mediaElement.error != null); | 97 assert_true(mediaElement.error != null); |
| 85 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); | 98 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
SRC_NOT_SUPPORTED); |
| 86 | 99 |
| 87 assert_equals(mediaSource.sourceBuffers.length, 0); | 100 assert_equals(mediaSource.sourceBuffers.length, 0); |
| 88 assert_equals(mediaSource.readyState, "closed"); | 101 assert_equals(mediaSource.readyState, "closed"); |
| 89 test.done(); | 102 |
| 103 // Give a short time for a broken implementation to errantly
fire |
| 104 // "error" on sourceBuffer. |
| 105 test.step_timeout(test.step_func_done(), 0); |
| 90 }); | 106 }); |
| 91 }, "Signaling 'network' error via endOfStream() before initializatio
n segment has been appended."); | 107 }, "Signaling 'network' error via endOfStream() before initializatio
n segment has been appended."); |
| 92 | 108 |
| 93 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 109 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 94 { | 110 { |
| 95 var initSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.init); | 111 var initSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.init); |
| 96 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); | 112 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); |
| 97 | 113 |
| 114 // Fail if the append error algorithm occurs, since the decode |
| 115 // error will be provided by us directly via endOfStream(). |
| 116 sourceBuffer.addEventListener("error", test.unreached_func("'err
or' should not be fired on sourceBuffer")); |
| 117 |
| 98 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); | 118 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); |
| 99 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m
etadata."); | 119 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m
etadata."); |
| 100 sourceBuffer.appendBuffer(initSegment); | 120 sourceBuffer.appendBuffer(initSegment); |
| 101 | 121 |
| 102 test.waitForExpectedEvents(function() | 122 test.waitForExpectedEvents(function() |
| 103 { | 123 { |
| 104 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE
_METADATA); | 124 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE
_METADATA); |
| 105 | 125 |
| 106 test.expectEvent(mediaElement, "error", "mediaElement error.
"); | 126 test.expectEvent(mediaElement, "error", "mediaElement error.
"); |
| 107 test.expectEvent(mediaSource, "sourceended", "mediaSource en
ded."); | 127 test.expectEvent(mediaSource, "sourceended", "mediaSource en
ded."); |
| 108 mediaSource.endOfStream("decode"); | 128 mediaSource.endOfStream("decode"); |
| 109 }); | 129 }); |
| 110 | 130 |
| 111 test.waitForExpectedEvents(function() | 131 test.waitForExpectedEvents(function() |
| 112 { | 132 { |
| 113 assert_true(mediaElement.error != null); | 133 assert_true(mediaElement.error != null); |
| 114 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
DECODE); | 134 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
DECODE); |
| 115 assert_equals(mediaSource.readyState, "ended"); | 135 assert_equals(mediaSource.readyState, "ended"); |
| 116 test.done(); | 136 |
| 137 // Give a short time for a broken implementation to errantly
fire |
| 138 // "error" on sourceBuffer. |
| 139 test.step_timeout(test.step_func_done(), 0); |
| 117 }); | 140 }); |
| 141 |
| 118 }, "Signaling 'decode' error via endOfStream() after initialization
segment has been appended and the HTMLMediaElement has reached HAVE_METADATA."); | 142 }, "Signaling 'decode' error via endOfStream() after initialization
segment has been appended and the HTMLMediaElement has reached HAVE_METADATA."); |
| 119 | 143 |
| 120 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 144 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 121 { | 145 { |
| 122 var initSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.init); | 146 var initSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.init); |
| 123 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); | 147 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); |
| 124 | 148 |
| 149 // Fail if the append error algorithm occurs, since the network |
| 150 // error will be provided by us directly via endOfStream(). |
| 151 sourceBuffer.addEventListener("error", test.unreached_func("'err
or' should not be fired on sourceBuffer")); |
| 152 |
| 125 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); | 153 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); |
| 126 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m
etadata."); | 154 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m
etadata."); |
| 127 sourceBuffer.appendBuffer(initSegment); | 155 sourceBuffer.appendBuffer(initSegment); |
| 128 | 156 |
| 129 test.waitForExpectedEvents(function() | 157 test.waitForExpectedEvents(function() |
| 130 { | 158 { |
| 131 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE
_METADATA); | 159 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE
_METADATA); |
| 132 | |
| 133 test.expectEvent(mediaElement, "error", "mediaElement error.
"); | 160 test.expectEvent(mediaElement, "error", "mediaElement error.
"); |
| 134 test.expectEvent(mediaSource, "sourceended", "mediaSource en
ded."); | 161 test.expectEvent(mediaSource, "sourceended", "mediaSource en
ded."); |
| 135 mediaSource.endOfStream("network"); | 162 mediaSource.endOfStream("network"); |
| 136 }); | 163 }); |
| 137 | 164 |
| 138 test.waitForExpectedEvents(function() | 165 test.waitForExpectedEvents(function() |
| 139 { | 166 { |
| 140 assert_true(mediaElement.error != null); | 167 assert_true(mediaElement.error != null); |
| 141 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
NETWORK); | 168 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
NETWORK); |
| 142 assert_equals(mediaSource.readyState, "ended"); | 169 assert_equals(mediaSource.readyState, "ended"); |
| 143 test.done(); | 170 |
| 171 // Give a short time for a broken implementation to errantly
fire |
| 172 // "error" on sourceBuffer. |
| 173 test.step_timeout(test.step_func_done(), 0); |
| 144 }); | 174 }); |
| 145 }, "Signaling 'network' error via endOfStream() after initialization
segment has been appended and the HTMLMediaElement has reached HAVE_METADATA.")
; | 175 }, "Signaling 'network' error via endOfStream() after initialization
segment has been appended and the HTMLMediaElement has reached HAVE_METADATA.")
; |
| 146 | 176 |
| 147 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) | 177 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou
rceBuffer, mediaData) |
| 148 { | 178 { |
| 149 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); | 179 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT
HING); |
| 150 | 180 |
| 151 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.media[0]); | 181 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData,
segmentInfo.media[0]); |
| 152 var index = segmentInfo.init.size + (mediaSegment.length - 1) /
2; | 182 var index = segmentInfo.init.size + (mediaSegment.length - 1) /
2; |
| 153 // Corrupt the media data from index of mediaData, so it can sig
nal 'decode' error. | 183 // Corrupt the media data from index of mediaData, so it can sig
nal 'decode' error. |
| 154 // Here use mediaSegment to replace the original mediaData[index
, index + mediaSegment.length] | 184 // Here use mediaSegment to replace the original mediaData[index
, index + mediaSegment.length] |
| 155 mediaData.set(mediaSegment, index); | 185 mediaData.set(mediaSegment, index); |
| 156 | 186 |
| 187 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m
etadata."); |
| 188 test.expectEvent(sourceBuffer, "error", "sourceBuffer error."); |
| 189 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append
ended."); |
| 157 test.expectEvent(mediaElement, "error", "mediaElement error."); | 190 test.expectEvent(mediaElement, "error", "mediaElement error."); |
| 191 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.
"); |
| 158 sourceBuffer.appendBuffer(mediaData); | 192 sourceBuffer.appendBuffer(mediaData); |
| 159 | 193 |
| 160 test.waitForExpectedEvents(function() | 194 test.waitForExpectedEvents(function() |
| 161 { | 195 { |
| 162 assert_true(mediaElement.error != null); | 196 assert_true(mediaElement.error != null); |
| 163 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
DECODE); | 197 assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_
DECODE); |
| 164 test.done(); | 198 test.done(); |
| 165 }); | 199 }); |
| 166 }, "Signaling 'decode' error via segment parser loop algorithm after
initialization segment and partial media segment has been appended."); | 200 }, "Signaling 'decode' error via segment parser loop algorithm after
initialization segment and partial media segment has been appended."); |
| 167 </script> | 201 </script> |
| 168 </body> | 202 </body> |
| 169 </html> | 203 </html> |
| OLD | NEW |