<!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> let testName = "Inline viewer support with no device"; // Purposefully not connecting a device to ensure that viewer is always // supported if that is the only feature requested. xr_promise_test(testName, (t) => { function session_resolves(sessionMode, sessionInit) { return navigator.xr.requestSession(sessionMode, sessionInit) .then(session => session.end()); } function session_rejects(expected, sessionMode, sessionInit) { return promise_rejects_dom(t, expected, navigator.xr.requestSession(sessionMode, sessionInit) .then(session => session.end())); } return session_resolves('inline', { // RequestSession with 'viewer' as a required featre should succeed, even // without user activation. requiredFeatures: ['viewer'] }) .then(() => { // RequestSession with 'viewer' as an optional feature should succeed, even // without user activation. return session_resolves('inline', { optionalFeatures: ['viewer'] }) }) .then(() => { // RequestSession with no requirements should succeed. return session_resolves('inline', {}); }) .then(() => { // RequestSession with non-viewer optional features should fail // without user activation. return session_rejects("SecurityError", 'inline', { optionalFeatures: ['local'] }); }) .then(() => { // RequestSession with non-viewer required features should fail // without user activation. return session_rejects("SecurityError", 'inline', { optionalFeatures: ['local'] }); }) .then(() => promise_simulate_user_activation(() => { // RequestSession with unsupported optional features should succeed. return session_resolves('inline', { requiredFeatures: ['viewer'], optionalFeatures: ['local'] }) })) .then(() => promise_simulate_user_activation(() => { // Request with unsupported required features should reject. return session_rejects("NotSupportedError", 'inline', { requiredFeatures: ['local'] }); })); }); </script> </body>