| <!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> | |
| <canvas></canvas> | |
| <script> | |
| const testName = "Validate enabledFeatures on XRSession"; | |
| const supportedFeatureList = [ | |
| 'viewer', | |
| 'local', | |
| 'local-floor', | |
| 'anchors', | |
| 'hit-test', | |
| 'dom-overlay' | |
| ]; | |
| const fakeDeviceInitParams = { | |
| supportsImmersive: true, | |
| supportedModes: ["inline", "immersive-vr"], | |
| views: VALID_VIEWS, | |
| viewerOrigin: IDENTITY_TRANSFORM, | |
| supportedFeatures: supportedFeatureList | |
| }; | |
| // NOTE: We explicit don't ask for the 'default' features of viewer/local to | |
| // verify that they are being added here. | |
| const requestFeatures = [ | |
| 'local-floor', | |
| 'anchors', | |
| 'secondary-views', | |
| 'camera-access', | |
| ]; | |
| const testFunction = function(session, fakeDeviceController, t) { | |
| return new Promise((resolve,reject) => { | |
| const unsupportedRequestedFeatures = []; | |
| for (const feature of requestFeatures) { | |
| if (!supportedFeatureList.includes(feature)) | |
| unsupportedRequestedFeatures.push(feature); | |
| } | |
| const enabledFeatures = session.enabledFeatures; | |
| const modeDefaultFeatures = DEFAULT_FEATURES[session.mode]; | |
| t.step(() => { | |
| // Whether they were requested or not, all Default features should be | |
| // enabled. | |
| for (const feature of modeDefaultFeatures) { | |
| assert_true(enabledFeatures.includes(feature), | |
| "Did not support default feature: " + feature); | |
| } | |
| // Assert that we asked for everything that was included apart from the | |
| // default features | |
| for (const feature of enabledFeatures) { | |
| assert_true(requestFeatures.includes(feature) || | |
| modeDefaultFeatures.includes(feature), | |
| "Enabled unrequested feature: " + feature); | |
| } | |
| // Assert that all of the features we asked are either excluded because | |
| // they were unsupported, or included because they were supported. | |
| for (const feature of requestFeatures) { | |
| if (unsupportedRequestedFeatures.includes(feature)) { | |
| assert_false(enabledFeatures.includes(feature), | |
| "Enabled supposedly unsupported feature: " + feature); | |
| } else { | |
| assert_true(enabledFeatures.includes(feature), | |
| "Did not enable supposedly supported feature: " + feature); | |
| } | |
| } | |
| }); | |
| resolve(); | |
| }); | |
| }; | |
| xr_session_promise_test(testName, testFunction, | |
| fakeDeviceInitParams, 'immersive-vr', { optionalFeatures: requestFeatures }); | |
| </script> | |
| </body> |