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