tor-browser

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

xrWebGLLayer_constructor.https.html (3030B)


      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 testConstructor(t, gl) {
     10  return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
     11    .then(() => {
     12      return navigator.xr.requestSession('inline')
     13        .then((session) => {
     14          try {
     15            let webglLayerIncompatible = new XRWebGLLayer(session, gl);
     16          } catch (err) {
     17            assert_unreached("Inline XRWebGLLayers should not fail when created with a context that is not XRCompatible");
     18          }
     19        });
     20    })
     21    .then(() => {
     22      return new Promise((resolve) => {
     23        navigator.xr.test.simulateUserActivation(() => {
     24          let xrSession = null;
     25          navigator.xr.requestSession('immersive-vr')
     26          .then((session) => {
     27            xrSession = session;
     28            t.step_func(() => {
     29              try {
     30                let webglLayerIncompatible = new XRWebGLLayer(xrSession, gl);
     31                assert_unreached("XRWebGLLayer should fail when created with a context that is not XRCompatible")
     32              } catch (err) {
     33                assert_equals(err.name, "InvalidStateError");
     34              }
     35            })
     36 
     37            return gl.makeXRCompatible();
     38          }).then(() => {
     39            try {
     40              let webglLayerGood = new XRWebGLLayer(xrSession, gl);
     41            } catch (err) {
     42              reject("XRWebGLLayer should not fail with valid arguments");
     43            }
     44 
     45            let lose_context_ext = gl.getExtension('WEBGL_lose_context');
     46 
     47            gl.canvas.addEventListener('webglcontextlost', (ev) => {
     48              ev.preventDefault();
     49 
     50              try {
     51                let webglLayerBadContext = new XRWebGLLayer(xrSession, gl);
     52                reject("XRWebGLLayer should fail when created with a lost context");
     53              } catch (err) {
     54                assert_equals(err.name, 'InvalidStateError');
     55                t.step_timeout(() => { lose_context_ext.restoreContext(); }, 100);
     56              }
     57            });
     58 
     59            gl.canvas.addEventListener('webglcontextrestored', (ev) => {
     60              resolve(xrSession.end().then(() => {
     61                try {
     62                  let webglLayerBadSession = new XRWebGLLayer(xrSession, gl);
     63                  assert_unreached("XRWebGLLayer should fail when created with an ended session");
     64                } catch (err) {
     65                  assert_equals(err.name, 'InvalidStateError');
     66                }
     67              }));
     68            });
     69 
     70            lose_context_ext.loseContext();
     71          });
     72        });
     73      });
     74    });
     75 }
     76 xr_promise_test("Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl",
     77  testConstructor, null, 'webgl');
     78 
     79 xr_promise_test("Ensure that XRWebGLLayer's constructor throws appropriate errors using webgl2",
     80  testConstructor, null, 'webgl2');
     81 
     82 </script>