<!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 immersiveTestName = "Immersive XRSession requestReferenceSpace returns expected objects"; let nonImmersiveTestName = "Non-immersive XRSession requestReferenceSpace returns expected objects"; let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; let testFunction = function(session, fakeDeviceController, t) { return promise_rejects_js(t, TypeError, session.requestReferenceSpace('foo')) .then(() => Promise.all([ session.requestReferenceSpace('viewer').then( (referenceSpace) => { t.step(() => { assert_true(referenceSpace instanceof XRSpace, "identity reference space is not correct type."); assert_true(referenceSpace instanceof XRReferenceSpace, "identity reference space is not correct type."); }); }), session.requestReferenceSpace('local').then( (referenceSpace) => { t.step(() => { assert_true(referenceSpace instanceof XRSpace, "eye-level stationary reference space is not correct type."); assert_true(referenceSpace instanceof XRReferenceSpace, "eye-level stationary reference space is not correct type."); }); }), session.requestReferenceSpace('local-floor').then( (referenceSpace) => { t.step(() => { assert_true(referenceSpace instanceof XRSpace, "floor-level stationary reference space is not correct type."); assert_true(referenceSpace instanceof XRReferenceSpace, "floor-level stationary reference space is not correct type."); }); }) ])) .then(() => { if (session.mode == 'inline') { // Bounded reference spaces are not allowed in inline sessions. return promise_rejects_dom(t, "NotSupportedError", session.requestReferenceSpace('bounded-floor')) } }) .then(() => { if (session.mode == 'inline') { // Unbounded reference spaces are not allowed in inline sessions. return promise_rejects_dom(t, "NotSupportedError", session.requestReferenceSpace('unbounded')) } }) }; // Reference spaces that aren't included in the default feature list must // be specified as a required or optional features on session creation. xr_session_promise_test( immersiveTestName, testFunction, fakeDeviceInitParams, 'immersive-vr', {requiredFeatures: ['local-floor'], optionalFeatures: ['bounded-floor', 'unbounded']}); xr_session_promise_test( nonImmersiveTestName, testFunction, fakeDeviceInitParams, 'inline', {requiredFeatures: ['local'], optionalFeatures: ['local-floor']}); </script> </body>