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> |
wolenetz
2016/06/18 00:27:55
aside: MSE layout test cleanup of these obsolete p
| |
11 <script> | 11 <script> |
12 function ErrorTest(testFunction, description) | 12 function ErrorTest(testFunction, description) |
13 { | 13 { |
14 mediasource_test(function(test, mediaElement, mediaSource) | 14 mediasource_test(function(test, mediaElement, mediaSource) |
15 { | 15 { |
16 var segmentInfo = MediaSourceUtil.SEGMENT_INFO; | 16 var segmentInfo = MediaSourceUtil.SEGMENT_INFO; |
17 | 17 |
18 if (!segmentInfo) { | 18 if (!segmentInfo) { |
19 assert_unreached("No segment info compatible with this M ediaSource implementation."); | 19 assert_unreached("No segment info compatible with this M ediaSource implementation."); |
20 return; | 20 return; |
21 } | 21 } |
22 | 22 |
23 var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.t ype); | 23 var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.t ype); |
24 MediaSourceUtil.loadBinaryData(test, segmentInfo.url, functi on(mediaData) | 24 MediaSourceUtil.loadBinaryData(test, segmentInfo.url, functi on(mediaData) |
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."); | |
wolenetz
2016/06/18 00:27:55
Note to reviewers: This was the critically missing
| |
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(); | |
69 }); | 74 }); |
75 | |
76 // Give a short time for a broken implementation to errantly fir e | |
77 // "error" on sourceBuffer. | |
78 test.waitForExpectedEvents(test.step_func_done()); | |
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(); | |
90 }); | 102 }); |
103 | |
104 // Give a short time for a broken implementation to errantly fir e | |
105 // "error" on sourceBuffer. | |
106 test.waitForExpectedEvents(test.step_func_done()); | |
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(); | |
117 }); | 136 }); |
137 | |
138 // Give a short time for a broken implementation to errantly fir e | |
139 // "error" on sourceBuffer. | |
140 test.waitForExpectedEvents(test.step_func_done()); | |
118 }, "Signaling 'decode' error via endOfStream() after initialization segment has been appended and the HTMLMediaElement has reached HAVE_METADATA."); | 141 }, "Signaling 'decode' error via endOfStream() after initialization segment has been appended and the HTMLMediaElement has reached HAVE_METADATA."); |
119 | 142 |
120 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou rceBuffer, mediaData) | 143 ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sou rceBuffer, mediaData) |
121 { | 144 { |
122 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); | 145 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); |
123 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT HING); | 146 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOT HING); |
124 | 147 |
148 // Fail if the append error algorithm occurs, since the network | |
149 // error will be provided by us directly via endOfStream(). | |
150 sourceBuffer.addEventListener("error", test.unreached_func("'err or' should not be fired on sourceBuffer")); | |
151 | |
125 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended."); | 152 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended."); |
126 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m etadata."); | 153 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement m etadata."); |
127 sourceBuffer.appendBuffer(initSegment); | 154 sourceBuffer.appendBuffer(initSegment); |
128 | 155 |
129 test.waitForExpectedEvents(function() | 156 test.waitForExpectedEvents(function() |
130 { | 157 { |
131 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE _METADATA); | 158 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE _METADATA); |
132 | 159 |
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(); | |
144 }); | 170 }); |
171 | |
172 // Give a short time for a broken implementation to errantly fir e | |
173 // "error" on sourceBuffer. | |
174 test.waitForExpectedEvents(test.step_func_done()); | |
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."); | |
wolenetz
2016/06/18 00:27:55
ditto note to reviewers
| |
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 |