request-video-frame-callback-parallel.html (1792B)
1 <!DOCTYPE html> 2 <html> 3 <title>Test having multiple video.rVFC callbacks in flight for a single element.</title> 4 <body></body> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/common/media.js"></script> 8 <script> 9 10 promise_test(async function(t) { 11 let done; 12 const promise = new Promise(resolve => done = resolve); 13 14 let video = document.createElement('video'); 15 video.muted = true; 16 document.body.appendChild(video); 17 18 let firstTime; 19 let firstMetadata; 20 21 video.requestVideoFrameCallback(t.step_func((time, metadata) => { 22 firstTime = time; 23 firstMetadata = metadata; 24 })); 25 26 video.requestVideoFrameCallback(t.step_func((time, metadata) => { 27 assert_equals(firstTime, time); 28 assert_object_equals(firstMetadata, metadata); 29 done(); 30 })); 31 32 video.src = getVideoURI('/media/movie_5'); 33 video.play(); 34 35 return promise; 36 }, 'Test callbacks get the same information.'); 37 38 promise_test(async function(t) { 39 let done; 40 const promise = new Promise(resolve => done = resolve); 41 42 let video = document.createElement('video'); 43 video.muted = true; 44 document.body.appendChild(video); 45 46 let secondCallbackId; 47 48 video.requestVideoFrameCallback( 49 t.step_func(_ => { video.cancelVideoFrameCallback(secondCallbackId); }) 50 ); 51 52 secondCallbackId = video.requestVideoFrameCallback( 53 t.step_func(_ => { 54 assert_unreached("Cancelled callbacks shouldn't be executed") 55 }) 56 ); 57 58 // NOTE: This callback should be executed last. 59 video.requestVideoFrameCallback(done); 60 61 video.src = getVideoURI('/media/movie_5'); 62 video.play(); 63 64 return promise; 65 }, 'Test we can cancel callbacks from callbacks.'); 66 </script> 67 </html>