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 |