| <!DOCTYPE html> |
| <html> |
| <title>Test that video.rVFC callbacks started during an XRSession work.</title> |
| <body> |
| <canvas/> |
| </body> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/media.js"></script> |
| <script src="../webxr/resources/webxr_util.js"></script> |
| <script src="../webxr/resources/webxr_test_constants.js"></script> |
| <script> |
| |
| let testFunction = async function(session, fakeDeviceController, t) { |
| let watcherDone = new Event("watcherdone"); |
| let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]); |
| let eventPromise = eventWatcher.wait_for(["end", "watcherdone"]); |
| |
| // Start the video.rVFC callbacks while we are in the the XR Session. |
| let video = document.createElement('video'); |
| video.src = getVideoURI('/media/movie_5'); |
| |
| var numberVFCs = 0; |
| let videoCallback = () => { |
| numberVFCs++; |
| video.requestVideoFrameCallback(videoCallback); |
| } |
| |
| video.requestVideoFrameCallback(videoCallback); |
| video.play(); |
| |
| function onXRFrame(time, frame) { |
| if(numberVFCs >= 2) { |
| // Make sure video.rVFCs are coming through before ending the |
| // session. |
| session.end(); |
| } |
| |
| session.requestAnimationFrame(onXRFrame); |
| } |
| |
| function onSessionEnd(event) { |
| // Make sure we are still getting rVFC callbacks after the session end. |
| numberVFCs = 0; |
| t.step_wait_func(() => numberVFCs >= 2, |
| () => session.dispatchEvent(watcherDone), |
| "Time out waiting for VFC callbacks"); |
| } |
| |
| session.addEventListener("end", onSessionEnd, false); |
| session.requestAnimationFrame(onXRFrame); |
| |
| return eventPromise; |
| } |
| |
| xr_session_promise_test('Make sure video.rVFC callbacks started during an immersive session continue after it ends', |
| testFunction, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr'); |
| |
| </script> |
| </html> |