tor-browser

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

xrViewerPose_secondaryViews.https.html (3287B)


      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 <script src="resources/webxr_test_asserts.js"></script>
      8 
      9 <script>
     10 
     11 let nonImmersiveNoSecondaryTestName =
     12  "Only primary views are returned if secondary views are not requested for non-immersive";
     13 let immersiveNoSecondaryTestName =
     14  "Only primary views are returned if secondary views are not requested for immersive";
     15 let nonImmersiveSecondaryTestName =
     16  "Requesting secondary views only returns primary views for non-immersive";
     17 let immersiveSecondaryTestName =
     18  "Requesting secondary views returns both primary and secondary views for immersive";
     19 
     20 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
     21 
     22 let verifyView = function(view, eye, isFirstPersonObserver) {
     23  assert_equals(view.eye, eye);
     24  assert_equals(view.isFirstPersonObserver, isFirstPersonObserver);
     25 };
     26 
     27 let verifyInlineViews = function(views) {
     28  // Inline sessions should never have secondary views regardless of whether
     29  // it was requested or not.
     30  assert_equals(views.length, 1);
     31  verifyView(views[0], "none", false);
     32 };
     33 
     34 let verifyImmersiveViews = function(views, secondaryViewsEnabled) {
     35  verifyView(views[0], "left", false);
     36  verifyView(views[1], "right", false);
     37 
     38  if (secondaryViewsEnabled) {
     39    assert_equals(views.length, 3);
     40    verifyView(views[2], "none", true);
     41  } else {
     42    assert_equals(views.length, 2);
     43  }
     44 };
     45 
     46 let testFunction = function(session, fakeDeviceController, t) {
     47  return session.requestReferenceSpace('local')
     48    .then((referenceSpace) => new Promise((resolve, reject) => {
     49      function onFrame(time, xrFrame) {
     50        t.step(() => {
     51          let pose = xrFrame.getViewerPose(referenceSpace);
     52          if (!pose) {
     53            // For inline sessions, the window may have triggered this frame,
     54            // instead of the session. This frame has no frame data which
     55            // results in a null pose.
     56            assert_true(session.mode == 'inline');
     57            session.requestAnimationFrame(onFrame);
     58            return;
     59          }
     60 
     61          if (session.mode == 'inline') {
     62            verifyInlineViews(pose.views);
     63          } else {
     64            verifyImmersiveViews(
     65              pose.views,
     66              session.sessionInit['optionalFeatures'].includes('secondary-views'));
     67          }
     68 
     69          resolve();
     70        });
     71      }
     72      session.requestAnimationFrame(onFrame);
     73    }));
     74 };
     75 
     76 xr_session_promise_test(
     77  nonImmersiveNoSecondaryTestName, testFunction, fakeDeviceInitParams, 'inline',
     78  {'requiredFeatures': ['local'],
     79    'optionalFeatures': []});
     80 xr_session_promise_test(
     81  immersiveNoSecondaryTestName, testFunction, fakeDeviceInitParams, 'immersive-vr',
     82  {'requiredFeatures': ['local'],
     83    'optionalFeatures': []});
     84 xr_session_promise_test(
     85  nonImmersiveSecondaryTestName, testFunction, fakeDeviceInitParams, 'inline',
     86  {'requiredFeatures': ['local'],
     87    'optionalFeatures': ['secondary-views']});
     88 xr_session_promise_test(
     89  immersiveSecondaryTestName, testFunction, fakeDeviceInitParams, 'immersive-vr',
     90  {'requiredFeatures': ['local'],
     91    'optionalFeatures': ['secondary-views']});
     92 
     93 </script>
     94 </body>