Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/media/media-source/mediasource-errors.html

Issue 2076673005: MSE: Plumb ChunkDemuxer appendData failures into append Error algorithm (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed the layout test Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698