tor-browser

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

xrSession_updateRenderState.https.html (2833B)


      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 
      9  function testUpdateRenderState(xrSession, deviceController, t, { gl, glLayer }) {
     10    return new Promise((resolve, reject) => {
     11      const baseLayer = new XRWebGLLayer(xrSession, gl);
     12      const singleLayer = [
     13        new XRWebGLLayer(xrSession, gl),
     14      ];
     15      const multipleLayers = [
     16        new XRWebGLLayer(xrSession, gl),
     17        new XRWebGLLayer(xrSession, gl)
     18      ];
     19      const duplicateLayers = [
     20        baseLayer,
     21        new XRWebGLLayer(xrSession, gl),
     22        baseLayer
     23      ];
     24      const layersFeatureEnabled = xrSession.enabledFeatures.includes('layers');
     25 
     26      t.step(() => {
     27        assert_throws_dom('NotSupportedError', () => xrSession.updateRenderState({ baseLayer, layers: singleLayer }), "XRSession should throw an error when updating render state with both a baseLayer and layers set.");
     28      });
     29 
     30      t.step(() => {
     31        const updateRenderStateMultilayer = () => xrSession.updateRenderState({ layers: multipleLayers });
     32        if (layersFeatureEnabled) {
     33          try {
     34            updateRenderStateMultilayer();
     35          } catch (err) {
     36            reject("XRSession should support render state with multiple layers if the layers feature is enabled.");
     37          }
     38        } else {
     39          assert_throws_dom('NotSupportedError', updateRenderStateMultilayer, "XRSession should be able to updateRenderState with multiple layers only if the layers feature is enabled.");
     40        }
     41     });
     42 
     43      if (layersFeatureEnabled) {
     44        t.step(() => {
     45          assert_throws_js(TypeError, () => xrSession.updateRenderState({ layers: duplicateLayers }), "XRSession should throw a TypeError when updating render state with duplicate layers.");
     46        });
     47      }
     48 
     49     t.step(() => {
     50      navigator.xr.requestSession('inline', {}).then((otherSession) => {
     51        const otherSessionLayer = [ new XRWebGLLayer(otherSession, gl) ];
     52        assert_throws_js(TypeError, () => xrSession.updateRenderState({ layers: otherSessionLayer }), "XRSession should throw a TypeError when updating render state with a layer created for a different session.");
     53        resolve();
     54      });
     55     });
     56    });
     57  }
     58 
     59  xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state without layers feature enabled",
     60    testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', {});
     61 
     62  xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state with layers feature enabled",
     63    testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', { requiredFeatures: ['layers'] });
     64 
     65 </script>