request-video-frame-callback-during-xr-session.https.html (2006B)
1 <!DOCTYPE html> 2 <html> 3 <title>Test that video.rVFC callbacks started during an XRSession work.</title> 4 <body> 5 <canvas></canvas> 6 </body> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script src="/common/media.js"></script> 10 <script src="../webxr/resources/webxr_util.js"></script> 11 <script src="../webxr/resources/webxr_test_constants.js"></script> 12 <script> 13 14 let testFunction = async function(session, fakeDeviceController, t) { 15 let watcherDone = new Event("watcherdone"); 16 let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]); 17 let eventPromise = eventWatcher.wait_for(["end", "watcherdone"]); 18 19 // Start the video.rVFC callbacks while we are in the XR Session. 20 let video = document.createElement('video'); 21 video.muted = true; 22 video.src = getVideoURI('/media/movie_5'); 23 24 var numberVFCs = 0; 25 let videoCallback = () => { 26 numberVFCs++; 27 video.requestVideoFrameCallback(videoCallback); 28 } 29 30 video.requestVideoFrameCallback(videoCallback); 31 video.play(); 32 33 function onXRFrame(time, frame) { 34 if(numberVFCs >= 2) { 35 // Make sure video.rVFCs are coming through before ending the 36 // session. 37 session.end(); 38 } 39 40 session.requestAnimationFrame(onXRFrame); 41 } 42 43 function onSessionEnd(event) { 44 // Make sure we are still getting rVFC callbacks after the session end. 45 numberVFCs = 0; 46 t.step_wait_func(() => numberVFCs >= 2, 47 () => session.dispatchEvent(watcherDone), 48 "Time out waiting for VFC callbacks"); 49 } 50 51 session.addEventListener("end", onSessionEnd, false); 52 session.requestAnimationFrame(onXRFrame); 53 54 return eventPromise; 55 } 56 57 xr_session_promise_test('Make sure video.rVFC callbacks started during an immersive session continue after it ends', 58 testFunction, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr'); 59 60 </script> 61 </html>