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

Side by Side Diff: third_party/WebKit/LayoutTests/media/media-play-promise.html

Issue 1710933003: WIP convert media-play-promise.html to testharness.js Base URL: https://chromium.googlesource.com/chromium/src.git@play-promise
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <html> 1 <html>
2 <head> 2 <head>
3 <script src="../resources/testharness.js"></script>
4 <script src="../resources/testharnessreport.js"></script>
3 <script src=media-file.js></script> 5 <script src=media-file.js></script>
4 <script src=video-test.js></script>
5 6
6 <script> 7 <script>
7 // This is testing the behavior of play() with regards to the returned 8 // This is testing the behavior of play() with regards to the returned
8 // promise. This test file is creating a small framework in order to be able 9 // promise. This test file is creating a small framework in order to be able
9 // to test different cases easily and independently of each other. 10 // to test different cases easily and independently of each other.
10 // 11 //
11 // All tests have to be part of the TESTS array. When the page is loaded, 12 // All tests have to be part of the TESTS array. When the page is loaded,
12 // first function in the array is ran. A test is considered done when the 13 // first function in the array is ran. A test is considered done when the
13 // promise returned by mediaElement.play() is resolved or rejected. Each 14 // promise returned by mediaElement.play() is resolved or rejected. Each
14 // test then needs to call play() once which wraps this logic. When a test 15 // test then needs to call play() once which wraps this logic. When a test
15 // is finished, the next test in the array is ran until the entire array 16 // is finished, the next test in the array is ran until the entire array
16 // was processed. 17 // was processed.
17 // 18 //
18 // Each test should start by prting its name in order to facilitate reading 19 // Each test should start by prting its name in order to facilitate reading
19 // the output. 20 // the output.
20 21
22 // This is initialized during the test setup.
23 var gMediaElement = null;
24
21 function runNextTestOrFinish() 25 function runNextTestOrFinish()
22 { 26 {
23 currentTest++; 27 currentTestIndex++;
24 if (currentTest >= TESTS.length) { 28 if (currentTestIndex >= TESTS.length) {
25 endTest(); 29 currentTest.done();
26 return; 30 return;
27 } 31 }
28 32
29 consoleWrite(""); 33 var previousTest = currentTest;
30 TESTS[currentTest](); 34
35 var test = TESTS[currentTestIndex];
36 currentTest = async_test(test.description);
37 if (previousTest)
38 previousTest.done();
39 test.run(currentTest);
31 } 40 }
32 41
33 function play() 42 function play()
34 { 43 {
35 return mediaElement.play().then(function() { 44 // TODO: see if possible to do something like that in a clean fashion.
36 consoleWrite("Promise Resolved"); 45
37 }, function(e) { 46 // return mediaElement.play().then(function() {
38 consoleWrite("Promise Failed with " + e.name); 47 // consoleWrite("Promise Resolved");
39 }).then(runNextTestOrFinish); 48 // }, function(e) {
49 // consoleWrite("Promise Failed with " + e.name);
50 // }).then(runNextTestOrFinish);
40 } 51 }
41 52
42 function playWithUserGesture() 53 function playWithUserGesture()
43 { 54 {
55 // TODO: convert to work as a manual test.
56
44 if (!window.eventSender) { 57 if (!window.eventSender) {
45 failTest("No window.eventSender"); 58 failTest("No window.eventSender");
46 return; 59 return;
47 } 60 }
48 61
49 var target = document.querySelector("p"); 62 var target = document.querySelector("p");
50 target.onclick = function() { 63 target.onclick = function() {
51 play(); 64 play();
52 target.onclick = null; 65 target.onclick = null;
53 }; 66 };
54 67
55 var boundingRect = target.getBoundingClientRect(); 68 var boundingRect = target.getBoundingClientRect();
56 var x = boundingRect.left + (boundingRect.width / 2); 69 var x = boundingRect.left + (boundingRect.width / 2);
57 var y = boundingRect.top + (boundingRect.height / 2); 70 var y = boundingRect.top + (boundingRect.height / 2);
58 71
59 eventSender.mouseMoveTo(x, y); 72 eventSender.mouseMoveTo(x, y);
60 eventSender.mouseDown(); 73 eventSender.mouseDown();
61 eventSender.mouseUp(); 74 eventSender.mouseUp();
62 } 75 }
63 76
64 var currentTest = -1; 77 var currentTestIndex = -1;
78 var currentTest = null;
65 79
66 var TESTS = [ 80 var TESTS = [
67 // Test that play() on an element that is currently loading returns a
68 // promise which resolves successfuly.
69 function playLoading()
70 { 81 {
71 consoleWrite("playLoading()"); 82 description: "Test that play() on an element that is currently loadi ng returns a promise which resolves successfuly.",
72 internals.settings.setMediaPlaybackRequiresUserGesture(false); 83 run:
73 84 function playLoading(t)
74 run("mediaElement = document.createElement('audio')"); 85 {
75 var mediaFile = findMediaFile("audio", "content/test"); 86 var mediaElement = document.createElement('audio');
76 run("mediaElement.src = '" + mediaFile + "'"); 87 mediaElement.src = findMediaFile("audio", "content/test");
77 88
78 waitForEvent('playing'); 89 // TODO: add test checking the order between playing and the pro mise.
79 play(); 90
91 mediaElement.play().then(function() {
92 }, function(e) {
93 assert_unreached("Promise should be successful.")
94 }).then(runNextTestOrFinish);
95 }
80 }, 96 },
81 97
82 // Test that play() on an element that is already loaded returns a
83 // promise which which resolves successfuly.
84 function playLoaded()
85 { 98 {
86 consoleWrite("playLoaded()"); 99 description: "Test that play() on an element that is already loaded returns a promise which which resolves successfuly.",
87 internals.settings.setMediaPlaybackRequiresUserGesture(false); 100 run:
88 101 function playLoaded(t)
89 run("mediaElement = document.createElement('audio')"); 102 {
90 var mediaFile = findMediaFile("audio", "content/test"); 103 var mediaElement = document.createElement('audio');
91 run("mediaElement.src = '" + mediaFile + "'"); 104 mediaElement.src = findMediaFile("audio", "content/test");
92 105
93 waitForEvent('playing'); 106 mediaElement.addEventListener('canplaythrough', t.step_func(func tion() {
94 107 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE _ENOUGH_DATA);
95 waitForEvent('canplaythrough', function() { 108 assert_true(mediaElement.paused);
96 testExpected(HTMLMediaElement.HAVE_ENOUGH_DATA, mediaElement.rea dyState); 109
97 testExpected(true, mediaElement.paused) 110 // TODO: refactor
98 111 mediaElement.play().then(function() {
99 play(); 112 }, function(e) {
100 }); 113 assert_unreached("Promise should be successful.")
101 114 }).then(runNextTestOrFinish);
102 mediaElement.load(); 115 }));
116
117 mediaElement.load();
118 },
103 }, 119 },
104 120
105 // Test that play() on an element when media playback requires a gesture 121 // // Test that play() on an element that is already loaded returns a
106 // returns a rejected promise if there is no user gesture. 122 // // promise which which resolves successfuly.
107 function playRequiresUserGestureAndHasIt() 123 // function playLoaded()
108 { 124 // {
109 consoleWrite("playRequiresUserGestureAndHasIt()"); 125 // consoleWrite("playLoaded()");
110 internals.settings.setMediaPlaybackRequiresUserGesture(true); 126 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
111 127 //
112 run("mediaElement = document.createElement('audio')"); 128 // run("mediaElement = document.createElement('audio')");
113 var mediaFile = findMediaFile("audio", "content/test"); 129 // var mediaFile = findMediaFile("audio", "content/test");
114 run("mediaElement.src = '" + mediaFile + "'"); 130 // run("mediaElement.src = '" + mediaFile + "'");
115 131 //
116 waitForEvent('playing'); 132 // waitForEvent('playing');
117 playWithUserGesture(); 133 //
118 }, 134 // waitForEvent('canplaythrough', function() {
119 135 // testExpected(HTMLMediaElement.HAVE_ENOUGH_DATA, mediaElement. readyState);
120 // Test that play() on an element when media playback requires a gesture 136 // testExpected(true, mediaElement.paused)
121 // returns a resolved promise if there is a user gesture. 137 //
122 function playRequiresUserGestureAndDoesNotHaveIt() 138 // play();
123 { 139 // });
124 consoleWrite("playRequiresUserGestureAndDoesNotHaveIt()"); 140 //
125 internals.settings.setMediaPlaybackRequiresUserGesture(true); 141 // mediaElement.load();
126 142 // },
127 run("mediaElement = document.createElement('audio')"); 143 //
128 var mediaFile = findMediaFile("audio", "content/test"); 144 // // Test that play() on an element when media playback requires a gest ure
129 run("mediaElement.src = '" + mediaFile + "'"); 145 // // returns a rejected promise if there is no user gesture.
130 146 // function playRequiresUserGestureAndHasIt()
131 waitForEvent('playing'); 147 // {
132 play(); 148 // consoleWrite("playRequiresUserGestureAndHasIt()");
133 }, 149 // internals.settings.setMediaPlaybackRequiresUserGesture(true);
134 150 //
135 // Test that play() on an element with an unsupported content will 151 // run("mediaElement = document.createElement('audio')");
136 // return a rejected promise. 152 // var mediaFile = findMediaFile("audio", "content/test");
137 function playNotSupportedContent() 153 // run("mediaElement.src = '" + mediaFile + "'");
138 { 154 //
139 consoleWrite("playNotSupportedContent()"); 155 // waitForEvent('playing');
140 internals.settings.setMediaPlaybackRequiresUserGesture(false); 156 // playWithUserGesture();
141 157 // },
142 run("mediaElement = document.createElement('audio')"); 158 //
143 var mediaFile = findMediaFile("audio", "content/garbage"); 159 // // Test that play() on an element when media playback requires a gest ure
144 run("mediaElement.src = '" + mediaFile + "'"); 160 // // returns a resolved promise if there is a user gesture.
145 161 // function playRequiresUserGestureAndDoesNotHaveIt()
146 waitForEvent('playing'); 162 // {
147 waitForEvent('error', function() { 163 // consoleWrite("playRequiresUserGestureAndDoesNotHaveIt()");
148 testExpected("mediaElement.error", "[object MediaError]"); 164 // internals.settings.setMediaPlaybackRequiresUserGesture(true);
149 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC _NOT_SUPPORTED); 165 //
150 }); 166 // run("mediaElement = document.createElement('audio')");
151 play(); 167 // var mediaFile = findMediaFile("audio", "content/test");
152 }, 168 // run("mediaElement.src = '" + mediaFile + "'");
153 169 //
154 // Test that play() returns a resolved promise if called after the 170 // waitForEvent('playing');
155 // element suffered from a decode error. 171 // play();
156 function playDecodeError() 172 // },
157 { 173 //
158 consoleWrite("playDecodeError()"); 174 // // Test that play() on an element with an unsupported content will
159 internals.settings.setMediaPlaybackRequiresUserGesture(false); 175 // // return a rejected promise.
160 176 // function playNotSupportedContent()
161 run("mediaElement = document.createElement('audio')"); 177 // {
162 var mediaFile = findMediaFile("audio", "content/test"); 178 // consoleWrite("playNotSupportedContent()");
163 run("mediaElement.src = '" + mediaFile + "'"); 179 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
164 180 //
165 waitForEvent('playing'); 181 // run("mediaElement = document.createElement('audio')");
166 waitForEvent('error', function() { 182 // var mediaFile = findMediaFile("audio", "content/garbage");
167 testExpected("mediaElement.error", "[object MediaError]"); 183 // run("mediaElement.src = '" + mediaFile + "'");
168 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_DEC ODE); 184 //
169 }); 185 // waitForEvent('playing');
170 186 // waitForEvent('error', function() {
171 // The setMediaElementNetworkState() method requires metadata to be 187 // testExpected("mediaElement.error", "[object MediaError]");
172 // available. 188 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ SRC_NOT_SUPPORTED);
173 waitForEvent('loadedmetadata', function() { 189 // });
174 internals.setMediaElementNetworkState(mediaElement, 6 /* NetworkSt ateDecodeError */); 190 // play();
175 play(); 191 // },
176 }); 192 //
177 }, 193 // // Test that play() returns a resolved promise if called after the
178 194 // // element suffered from a decode error.
179 // Test that play() returns a resolved promise if called after the 195 // function playDecodeError()
180 // element suffered from a network error. 196 // {
181 function playNetworkError() 197 // consoleWrite("playDecodeError()");
182 { 198 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
183 consoleWrite("playNetworkError()"); 199 //
184 internals.settings.setMediaPlaybackRequiresUserGesture(false); 200 // run("mediaElement = document.createElement('audio')");
185 201 // var mediaFile = findMediaFile("audio", "content/test");
186 run("mediaElement = document.createElement('audio')"); 202 // run("mediaElement.src = '" + mediaFile + "'");
187 var mediaFile = findMediaFile("audio", "content/test"); 203 //
188 run("mediaElement.src = '" + mediaFile + "'"); 204 // waitForEvent('playing');
189 205 // waitForEvent('error', function() {
190 waitForEvent('playing'); 206 // testExpected("mediaElement.error", "[object MediaError]");
191 waitForEvent('error', function() { 207 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ DECODE);
192 testExpected("mediaElement.error", "[object MediaError]"); 208 // });
193 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_NET WORK); 209 //
194 }); 210 // // The setMediaElementNetworkState() method requires metadata to be
195 211 // // available.
196 // The setMediaElementNetworkState() method requires metadata to be 212 // waitForEvent('loadedmetadata', function() {
197 // available. 213 // internals.setMediaElementNetworkState(mediaElement, 6 /* Networ kStateDecodeError */);
198 waitForEvent('loadedmetadata', function() { 214 // play();
199 internals.setMediaElementNetworkState(mediaElement, 5 /* NetworkSt ateNetworkError */); 215 // });
200 play(); 216 // },
201 }); 217 //
202 }, 218 // // Test that play() returns a resolved promise if called after the
203 219 // // element suffered from a network error.
204 // Test that play() returns a rejected promise if the element is 220 // function playNetworkError()
205 // suferring from a not supported error. 221 // {
206 function playWithErrorAlreadySet() 222 // consoleWrite("playNetworkError()");
207 { 223 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
208 consoleWrite("playWithErrorAlreadySet()"); 224 //
209 internals.settings.setMediaPlaybackRequiresUserGesture(false); 225 // run("mediaElement = document.createElement('audio')");
210 226 // var mediaFile = findMediaFile("audio", "content/test");
211 run("mediaElement = document.createElement('audio')"); 227 // run("mediaElement.src = '" + mediaFile + "'");
212 var mediaFile = findMediaFile("audio", "content/garbage"); 228 //
213 run("mediaElement.src = '" + mediaFile + "'"); 229 // waitForEvent('playing');
214 230 // waitForEvent('error', function() {
215 run("mediaElement.load()"); 231 // testExpected("mediaElement.error", "[object MediaError]");
216 232 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ NETWORK);
217 waitForEvent('playing'); 233 // });
218 waitForEvent('error', function() { 234 //
219 testExpected("mediaElement.error", "[object MediaError]"); 235 // // The setMediaElementNetworkState() method requires metadata to be
220 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC _NOT_SUPPORTED); 236 // // available.
221 play(); 237 // waitForEvent('loadedmetadata', function() {
222 }); 238 // internals.setMediaElementNetworkState(mediaElement, 5 /* Networ kStateNetworkError */);
223 }, 239 // play();
224 240 // });
225 // Test that play() returns a resolved promise if the element had its 241 // },
226 // source changed after suffering from an error. 242 //
227 function playSrcChangedAfterError() 243 // // Test that play() returns a rejected promise if the element is
228 { 244 // // suferring from a not supported error.
229 consoleWrite("playSrcChangedAfterError()"); 245 // function playWithErrorAlreadySet()
230 internals.settings.setMediaPlaybackRequiresUserGesture(false); 246 // {
231 247 // consoleWrite("playWithErrorAlreadySet()");
232 run("mediaElement = document.createElement('audio')"); 248 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
233 var mediaFile = findMediaFile("audio", "content/garbage"); 249 //
234 run("mediaElement.src = '" + mediaFile + "'"); 250 // run("mediaElement = document.createElement('audio')");
235 251 // var mediaFile = findMediaFile("audio", "content/garbage");
236 run("mediaElement.load()"); 252 // run("mediaElement.src = '" + mediaFile + "'");
237 253 //
238 waitForEvent('error', function() { 254 // run("mediaElement.load()");
239 testExpected("mediaElement.error", "[object MediaError]"); 255 //
240 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC _NOT_SUPPORTED); 256 // waitForEvent('playing');
241 257 // waitForEvent('error', function() {
242 mediaFile = findMediaFile("audio", "content/test"); 258 // testExpected("mediaElement.error", "[object MediaError]");
243 run("mediaElement.src = '" + mediaFile + "'"); 259 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ SRC_NOT_SUPPORTED);
244 260 // play();
245 waitForEvent('playing'); 261 // });
246 waitForEvent('loadedmetadata', function() { 262 // },
247 play(); 263 //
248 }); 264 // // Test that play() returns a resolved promise if the element had its
249 }); 265 // // source changed after suffering from an error.
250 }, 266 // function playSrcChangedAfterError()
251 267 // {
252 // Test that play() returns a rejected promise if the element had an 268 // consoleWrite("playSrcChangedAfterError()");
253 // error and just changed its source. 269 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
254 function playRaceWithSrcChangeError() 270 //
255 { 271 // run("mediaElement = document.createElement('audio')");
256 consoleWrite("playRaceWithSrcChangeError()"); 272 // var mediaFile = findMediaFile("audio", "content/garbage");
257 internals.settings.setMediaPlaybackRequiresUserGesture(false); 273 // run("mediaElement.src = '" + mediaFile + "'");
258 274 //
259 run("mediaElement = document.createElement('audio')"); 275 // run("mediaElement.load()");
260 var mediaFile = findMediaFile("audio", "content/garbage"); 276 //
261 run("mediaElement.src = '" + mediaFile + "'"); 277 // waitForEvent('error', function() {
262 278 // testExpected("mediaElement.error", "[object MediaError]");
263 run("mediaElement.load()"); 279 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ SRC_NOT_SUPPORTED);
264 280 //
265 waitForEvent('error', function() { 281 // mediaFile = findMediaFile("audio", "content/test");
266 testExpected("mediaElement.error", "[object MediaError]"); 282 // run("mediaElement.src = '" + mediaFile + "'");
267 testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_SRC _NOT_SUPPORTED); 283 //
268 284 // waitForEvent('playing');
269 mediaFile = findMediaFile("audio", "content/test"); 285 // waitForEvent('loadedmetadata', function() {
270 run("mediaElement.src = '" + mediaFile + "'"); 286 // play();
271 287 // });
272 // TODO(mlamouri): if we print the 'playing' event, it seems 288 // });
273 // that it actually happens later. It's unclear why. 289 // },
274 play(); 290 //
275 }); 291 // // Test that play() returns a rejected promise if the element had an
276 }, 292 // // error and just changed its source.
277 293 // function playRaceWithSrcChangeError()
278 // Test that play() returns a resolved promise when calling play() then 294 // {
279 // pause() on an element that already has enough data to play. In other 295 // consoleWrite("playRaceWithSrcChangeError()");
280 // words, pause() doesn't cancel play() because it was resolved 296 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
281 // immediately. 297 //
282 function playFollowedByPauseWhenLoaded() 298 // run("mediaElement = document.createElement('audio')");
283 { 299 // var mediaFile = findMediaFile("audio", "content/garbage");
284 consoleWrite("playFollowedByPauseWhenLoaded()"); 300 // run("mediaElement.src = '" + mediaFile + "'");
285 internals.settings.setMediaPlaybackRequiresUserGesture(false); 301 //
286 302 // run("mediaElement.load()");
287 run("mediaElement = document.createElement('audio')"); 303 //
288 var mediaFile = findMediaFile("audio", "content/test"); 304 // waitForEvent('error', function() {
289 run("mediaElement.src = '" + mediaFile + "'"); 305 // testExpected("mediaElement.error", "[object MediaError]");
290 306 // testExpected("mediaElement.error.code", MediaError.MEDIA_ERR_ SRC_NOT_SUPPORTED);
291 run("mediaElement.load()"); 307 //
292 308 // mediaFile = findMediaFile("audio", "content/test");
293 waitForEvent('canplaythrough', function() { 309 // run("mediaElement.src = '" + mediaFile + "'");
294 waitForEvent('playing'); 310 //
295 testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_EN OUGH_DATA); 311 // // TODO(mlamouri): if we print the 'playing' event, it seems
296 play(); 312 // // that it actually happens later. It's unclear why.
297 testExpected("mediaElement.paused", false); 313 // play();
298 mediaElement.pause(); 314 // });
299 testExpected("mediaElement.paused", true); 315 // },
300 }); 316 //
301 }, 317 // // Test that play() returns a resolved promise when calling play() th en
302 318 // // pause() on an element that already has enough data to play. In oth er
303 // Test that play() returns a rejected promise when calling play() then 319 // // words, pause() doesn't cancel play() because it was resolved
304 // pause() on an element that doesn't have enough data to play. In other 320 // // immediately.
305 // words, pause() cancels play() before it can be resolved. 321 // function playFollowedByPauseWhenLoaded()
306 function playFollowedByPauseWhenLoading() 322 // {
307 { 323 // consoleWrite("playFollowedByPauseWhenLoaded()");
308 consoleWrite("playFollowedByPauseWhenLoaded()"); 324 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
309 internals.settings.setMediaPlaybackRequiresUserGesture(false); 325 //
310 326 // run("mediaElement = document.createElement('audio')");
311 run("mediaElement = document.createElement('audio')"); 327 // var mediaFile = findMediaFile("audio", "content/test");
312 var mediaFile = findMediaFile("audio", "content/test"); 328 // run("mediaElement.src = '" + mediaFile + "'");
313 run("mediaElement.src = '" + mediaFile + "'"); 329 //
314 330 // run("mediaElement.load()");
315 waitForEvent('playing'); 331 //
316 testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOTHIN G); 332 // waitForEvent('canplaythrough', function() {
317 play(); 333 // waitForEvent('playing');
318 testExpected("mediaElement.paused", false); 334 // testExpected("mediaElement.readyState", HTMLMediaElement.HAVE _ENOUGH_DATA);
319 mediaElement.pause(); 335 // play();
320 testExpected("mediaElement.paused", true); 336 // testExpected("mediaElement.paused", false);
321 }, 337 // mediaElement.pause();
322 338 // testExpected("mediaElement.paused", true);
323 // Test that load() rejects all the pending play() promises. 339 // });
324 function loadRejectPendingPromises() 340 // },
325 { 341 //
326 consoleWrite("loadRejectPendingPromises()"); 342 // // Test that play() returns a rejected promise when calling play() th en
327 internals.settings.setMediaPlaybackRequiresUserGesture(false); 343 // // pause() on an element that doesn't have enough data to play. In ot her
328 344 // // words, pause() cancels play() before it can be resolved.
329 run("mediaElement = document.createElement('audio')"); 345 // function playFollowedByPauseWhenLoading()
330 346 // {
331 play(); // the promise will be left pending. 347 // consoleWrite("playFollowedByPauseWhenLoaded()");
332 348 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
333 waitForEvent('playing'); 349 //
334 run("mediaElement.load()"); 350 // run("mediaElement = document.createElement('audio')");
335 }, 351 // var mediaFile = findMediaFile("audio", "content/test");
336 352 // run("mediaElement.src = '" + mediaFile + "'");
337 // Test that changing the src rejects the pending play() promises. 353 //
338 function newSrcRejectPendingPromises() 354 // waitForEvent('playing');
339 { 355 // testExpected("mediaElement.readyState", HTMLMediaElement.HAVE_NOT HING);
340 consoleWrite("newSrcRejectPendingPromises()"); 356 // play();
341 internals.settings.setMediaPlaybackRequiresUserGesture(false); 357 // testExpected("mediaElement.paused", false);
342 358 // mediaElement.pause();
343 run("mediaElement = document.createElement('audio')"); 359 // testExpected("mediaElement.paused", true);
344 360 // },
345 play(); // the promise will be left pending. 361 //
346 362 // // Test that load() rejects all the pending play() promises.
347 var mediaFile = findMediaFile("audio", "content/test"); 363 // function loadRejectPendingPromises()
348 run("mediaElement.src = '" + mediaFile + "'"); 364 // {
349 }, 365 // consoleWrite("loadRejectPendingPromises()");
350 366 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
351 // Test ordering of events and promises. 367 //
352 // This is testing a bug in Blink, see https://crbug.com/587871 368 // run("mediaElement = document.createElement('audio')");
353 function testEventAndPromiseOrdering() 369 //
354 { 370 // play(); // the promise will be left pending.
355 consoleWrite("testEventAndPromiseOrdering"); 371 //
356 internals.settings.setMediaPlaybackRequiresUserGesture(false); 372 // waitForEvent('playing');
357 373 // run("mediaElement.load()");
358 var promiseResolver = null; 374 // },
359 var p = new Promise(function(resolve, reject) { 375 //
360 promiseResolver = resolve; 376 // // Test that changing the src rejects the pending play() promises.
361 }); 377 // function newSrcRejectPendingPromises()
362 p.then(function() { 378 // {
363 consoleWrite("Should be after the play() promise is resolved"); 379 // consoleWrite("newSrcRejectPendingPromises()");
364 }); 380 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
365 381 //
366 run("mediaElement = document.createElement('audio')"); 382 // run("mediaElement = document.createElement('audio')");
367 var mediaFile = findMediaFile("audio", "content/test"); 383 //
368 run("mediaElement.src = '" + mediaFile + "'"); 384 // play(); // the promise will be left pending.
369 385 //
370 play(); 386 // var mediaFile = findMediaFile("audio", "content/test");
371 waitForEvent('playing', function() { 387 // run("mediaElement.src = '" + mediaFile + "'");
372 promiseResolver(); 388 // },
373 }); 389 //
374 } 390 // // Test ordering of events and promises.
391 // // This is testing a bug in Blink, see https://crbug.com/587871
392 // function testEventAndPromiseOrdering()
393 // {
394 // consoleWrite("testEventAndPromiseOrdering");
395 // internals.settings.setMediaPlaybackRequiresUserGesture(false);
396 //
397 // var promiseResolver = null;
398 // var p = new Promise(function(resolve, reject) {
399 // promiseResolver = resolve;
400 // });
401 // p.then(function() {
402 // consoleWrite("Should be after the play() promise is resolved" );
403 // });
404 //
405 // run("mediaElement = document.createElement('audio')");
406 // var mediaFile = findMediaFile("audio", "content/test");
407 // run("mediaElement.src = '" + mediaFile + "'");
408 //
409 // play();
410 // waitForEvent('playing', function() {
411 // promiseResolver();
412 // });
413 // }
375 ]; 414 ];
376 415
416 function requestUserGesture()
417 {
418 // TODO: the goal here is to call load() on gMediaElement so it will be
419 // registered as getting user gesture and play() and load() will work.
420 }
421
377 function start() 422 function start()
378 { 423 {
379 runNextTestOrFinish(); 424 var gMediaElement = document.createElement('audio');
425 gMediaElement.src = findMediaFile("audio", "content/test");
426
427 gMediaElement.play().then(function() {
428 }, function() {
429 if ('internals' in window)
430 internals.settings.setMediaPlaybackRequiresUserGesture(false);
431 else
432 return requestUserGesture();
433 }).then(runNextTestOrFinish);
380 } 434 }
381 435
382 </script> 436 </script>
383 </head> 437 </head>
384 438
385 <body onload="start()"> 439 <body onload="start()">
386 440
387 <p>Test the play() behaviour with regards to the returned promise for media elem ents.</p> 441 <p>Test the play() behaviour with regards to the returned promise for media elem ents.</p>
388 442
389 </body> 443 </body>
390 </html> 444 </html>
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698