tor-browser

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

render_state_update.https.html (3936B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="resources/webxr_util.js"></script>
      5 <script src="resources/webxr_test_constants.js"></script>
      6 
      7 <script>
      8 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
      9 
     10 let testSessionEnded = function(session, fakeDeviceController, t) {
     11  return new Promise((resolve, reject) => {
     12    resolve(session.end().then(() => {
     13      t.step(() => {
     14        assert_throws_dom('InvalidStateError', () => session.updateRenderState({}));
     15      });
     16    }));
     17  });
     18 };
     19 
     20 
     21 let testBaseLayer = function(session, fakeDeviceController, t, sessionObjects) {
     22  return new Promise((resolve, reject) => {
     23    navigator.xr.test.simulateUserActivation(() => {
     24      navigator.xr.requestSession('inline').then((tempSession) => {
     25        t.step(() => {
     26          assert_not_equals(session, tempSession);
     27          assert_throws_dom('InvalidStateError', () => session.updateRenderState({ baseLayer : new XRWebGLLayer(tempSession, sessionObjects.gl), }));
     28        });
     29      });
     30      resolve();
     31    });
     32  });
     33 };
     34 
     35 let testFieldOfView = function(session, fakeDeviceController, t) {
     36  return new Promise((resolve, reject) => {
     37    t.step(() => {
     38      assert_throws_dom('InvalidStateError', () => session.updateRenderState({ inlineVerticalFieldOfView : Math.PI, }));
     39    });
     40    resolve();
     41  });
     42 };
     43 
     44 let testNoParams = function(session, fakeDeviceController, t) {
     45  return new Promise((resolve, reject) => {
     46    try {
     47      session.updateRenderState({});
     48    } catch (err) {
     49      assert_unreached("updateRenderState should not fail (actually not do anything) with no params");
     50    }
     51    resolve();
     52  });
     53 };
     54 
     55 let testMinMaxClippingPlanes = function(session, fakeDeviceController, t, sessionObjects) {
     56  return new Promise((resolve, reject) => {
     57    let gl = sessionObjects.gl;
     58    gl.makeXRCompatible().then(() => {
     59      t.step(() => {
     60        let near = 0.2;
     61        let far = 0.8;
     62        let layer = new XRWebGLLayer(session, gl);
     63        session.updateRenderState({ depthNear: near, depthFar: far, baseLayer: layer });
     64        assert_not_equals(session.renderState.depthNear, near);
     65        assert_not_equals(session.renderState.depthFar, far);
     66        assert_not_equals(session.renderState.baseLayer, layer);
     67        session.requestAnimationFrame((time, xrFrame) => {
     68          t.step(() => {
     69            assert_equals(session.renderState.depthNear, near);
     70            assert_equals(session.renderState.depthFar, far);
     71            // Clamp negative values
     72            near = -20.3;
     73            far = -1.5;
     74            session.updateRenderState({ depthNear: near, depthFar: far });
     75            session.requestAnimationFrame((time, xrFrame) => {
     76              t.step(() => {
     77                assert_equals(session.renderState.depthNear, 0.0);
     78                assert_equals(session.renderState.depthFar, 0.0);
     79                resolve();
     80              });
     81            });
     82          });
     83        });
     84      });
     85    });
     86  });
     87 };
     88 
     89 let testName = "updateRenderState handles appropriately ended sessions";
     90 xr_session_promise_test(testName, testSessionEnded, fakeDeviceInitParams, 'immersive-vr');
     91 
     92 testName = "updateRenderState handles appropriately baseLayers created with different sessions";
     93 xr_session_promise_test(testName, testBaseLayer, fakeDeviceInitParams, 'immersive-vr');
     94 
     95 testName = "updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView";
     96 xr_session_promise_test(testName, testFieldOfView, fakeDeviceInitParams, 'immersive-vr');
     97 
     98 testName = "updateRenderState handles appropriately XRRenderStateInit with no params";
     99 xr_session_promise_test(testName, testNoParams, fakeDeviceInitParams, 'immersive-vr');
    100 
    101 testName = "updateRenderState clamps appropriately near/far clipping planes";
    102 xr_session_promise_test(testName, testMinMaxClippingPlanes, fakeDeviceInitParams, 'immersive-vr');
    103 
    104 </script>