tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>