| <!DOCTYPE html> |
| <body> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src="../resources/webxr_util.js"></script> |
| <script src="../resources/webxr_test_constants.js"></script> |
| |
| <script> |
| let testName = "Test that getReflectionCubeMap returns or throws appropriately without a reflection map."; |
| |
| let testFunction = (session, controller, t, sessionObjects) => new Promise((resolve) => { |
| let debug = xr_debug.bind(this, 'testFunction'); |
| let lightProbe1 = null; |
| let binding1 = new XRWebGLBinding(session, sessionObjects.gl); |
| |
| // Request a default lightProbe |
| session.requestLightProbe({reflectionFormat: session.preferredReflectionFormat }).then((probe) => { |
| // Stash and end session. |
| lightProbe1 = probe; |
| |
| debug("Querying first pair"); |
| t.step(() => { |
| assert_equals( |
| binding1.getReflectionCubeMap(lightProbe1), |
| null, |
| "Active binding and light probe shouldn't throw when requesting cube map"); |
| }); |
| |
| return session.end(); |
| }).then(() => { |
| // Need to request a new session. |
| navigator.xr.test.simulateUserActivation( () => { |
| navigator.xr.requestSession('immersive-ar', { 'requiredFeatures': ['light-estimation'] }) |
| .then((newSession) => { |
| let newBinding = new XRWebGLBinding(newSession, sessionObjects.gl); |
| newSession.requestLightProbe({ reflectionFormat: newSession.preferredReflectionFormat }).then((newProbe) => { |
| t.step(() => { |
| debug("Querying second pair"); |
| assert_equals( |
| newBinding.getReflectionCubeMap(newProbe), |
| null, |
| "Newly created binding and light probe shouldn't throw"); |
| |
| debug("Querying old pair"); |
| assert_throws_dom( |
| "InvalidStateError", |
| () => binding1.getReflectionCubeMap(lightProbe1), |
| "Binding created with an ended session should throw InvalidStateError"); |
| debug("Querying mismatched pair"); |
| assert_throws_dom( |
| "InvalidStateError", |
| () => newBinding.getReflectionCubeMap(lightProbe1), |
| "Querying binding with a probe with a different backing session should throw InvalidStateError"); |
| }); |
| debug("losing context"); |
| |
| // Trigger a context loss and verify that we are unable to get the reflectionCubeMap. |
| let lose_context_ext = sessionObjects.gl.getExtension('WEBGL_lose_context'); |
| |
| sessionObjects.gl.canvas.addEventListener('webglcontextlost', (ev) => { |
| ev.preventDefault(); |
| |
| t.step(() => { |
| assert_throws_dom( |
| "InvalidStateError", |
| () => newBinding.getReflectionCubeMap(newProbe), |
| "Querying for reflection cube map on a binding with context loss should throw InvalidStateError"); |
| }); |
| |
| resolve(newSession.end()); |
| }); |
| |
| lose_context_ext.loseContext(); |
| }); // Request second light probe |
| }); // Request second session |
| }); // SimulateUserActivation |
| }); // .then on session end |
| }); // testFunction |
| |
| xr_session_promise_test( |
| testName, |
| testFunction, |
| IMMERSIVE_AR_DEVICE, |
| 'immersive-ar', |
| {'requiredFeatures': ['light-estimation']}); |
| |
| </script> |
| </body> |