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>