<!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>
