tor-browser

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

xrWebGLBinding_constructor.https.html (3334B)


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