tor-browser

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

xrFrame_lifetime.https.html (2140B)


      1 <!DOCTYPE html>
      2 <body>
      3  <script src=/resources/testharness.js></script>
      4  <script src=/resources/testharnessreport.js></script>
      5  <script src="resources/webxr_util.js"></script>
      6  <script src="resources/webxr_test_constants.js"></script>
      7 
      8  <script>
      9    let immersiveTestName = "XRFrame methods throw exceptions outside of the " +
     10      "requestAnimationFrame callback for immersive sessions";
     11    let nonImmersiveTestName = "XRFrame methods throw exceptions outside of the " +
     12      "requestAnimationFrame callback for non-immersive sessions";
     13 
     14    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
     15 
     16    let testFunction = (testSession, testController, t) => new Promise((resolve) => {
     17      let staleFrame = null;
     18      let currentReferenceSpace = null;
     19      let currentViewerSpace = null;
     20 
     21      function onFrame(time, xrFrame) {
     22        t.step(() => {
     23          assert_true(xrFrame instanceof XRFrame);
     24        });
     25 
     26        staleFrame = xrFrame;
     27        step_timeout(afterFrame, 0);
     28      }
     29 
     30      function afterFrame() {
     31        t.step(() => {
     32          // Attempting to call a method on the frame outside the callback that
     33          // originally provided it should cause it to throw an exception.
     34          assert_throws_dom('InvalidStateError', () => staleFrame.getViewerPose(currentReferenceSpace));
     35          assert_throws_dom('InvalidStateError', () => staleFrame.getPose(currentViewerSpace, currentReferenceSpace));
     36        });
     37 
     38        // Test does not complete until the this function has executed.
     39        resolve();
     40      }
     41 
     42      testSession.requestReferenceSpace('viewer').then((viewerSpace) => {
     43        currentViewerSpace = viewerSpace;
     44        testSession.requestReferenceSpace('local').then((referenceSpace) => {
     45          currentReferenceSpace = referenceSpace;
     46          testSession.requestAnimationFrame(onFrame);
     47        });
     48      });
     49    });
     50 
     51    xr_session_promise_test(immersiveTestName, testFunction,
     52      fakeDeviceInitParams, 'immersive-vr');
     53    xr_session_promise_test(nonImmersiveTestName, testFunction,
     54      fakeDeviceInitParams, 'inline', { 'requiredFeatures': ['local'] });
     55 
     56  </script>
     57 </body>