3 <script src=/resources/testharness.js
></script>
4 <script src=/resources/testharnessreport.js
></script>
5 <script src=
"resources/webxr_util.js"></script>
6 <script src=
"resources/webxr_test_constants.js"></script>
7 <script src=
"resources/webxr_test_asserts.js"></script>
11 let nonImmersiveNoSecondaryTestName
=
12 "Only primary views are returned if secondary views are not requested for non-immersive";
13 let immersiveNoSecondaryTestName
=
14 "Only primary views are returned if secondary views are not requested for immersive";
15 let nonImmersiveSecondaryTestName
=
16 "Requesting secondary views only returns primary views for non-immersive";
17 let immersiveSecondaryTestName
=
18 "Requesting secondary views returns both primary and secondary views for immersive";
20 let fakeDeviceInitParams
= TRACKED_IMMERSIVE_DEVICE
;
22 let verifyView = function(view
, eye
, isFirstPersonObserver
) {
23 assert_equals(view
.eye
, eye
);
24 assert_equals(view
.isFirstPersonObserver
, isFirstPersonObserver
);
27 let verifyInlineViews = function(views
) {
28 // Inline sessions should never have secondary views regardless of whether
29 // it was requested or not.
30 assert_equals(views
.length
, 1);
31 verifyView(views
[0], "none", false);
34 let verifyImmersiveViews = function(views
, secondaryViewsEnabled
) {
35 verifyView(views
[0], "left", false);
36 verifyView(views
[1], "right", false);
38 if (secondaryViewsEnabled
) {
39 assert_equals(views
.length
, 3);
40 verifyView(views
[2], "none", true);
42 assert_equals(views
.length
, 2);
46 let testFunction = function(session
, fakeDeviceController
, t
) {
47 return session
.requestReferenceSpace('local')
48 .then((referenceSpace
) => new Promise((resolve
, reject
) => {
49 function onFrame(time
, xrFrame
) {
51 let pose
= xrFrame
.getViewerPose(referenceSpace
);
53 // For inline sessions, the window may have triggered this frame,
54 // instead of the session. This frame has no frame data which
55 // results in a null pose.
56 assert_true(session
.mode
== 'inline');
57 session
.requestAnimationFrame(onFrame
);
61 if (session
.mode
== 'inline') {
62 verifyInlineViews(pose
.views
);
66 session
.sessionInit
['optionalFeatures'].includes('secondary-views'));
72 session
.requestAnimationFrame(onFrame
);
76 xr_session_promise_test(
77 nonImmersiveNoSecondaryTestName
, testFunction
, fakeDeviceInitParams
, 'inline',
78 {'requiredFeatures': ['local'],
79 'optionalFeatures': []});
80 xr_session_promise_test(
81 immersiveNoSecondaryTestName
, testFunction
, fakeDeviceInitParams
, 'immersive-vr',
82 {'requiredFeatures': ['local'],
83 'optionalFeatures': []});
84 xr_session_promise_test(
85 nonImmersiveSecondaryTestName
, testFunction
, fakeDeviceInitParams
, 'inline',
86 {'requiredFeatures': ['local'],
87 'optionalFeatures': ['secondary-views']});
88 xr_session_promise_test(
89 immersiveSecondaryTestName
, testFunction
, fakeDeviceInitParams
, 'immersive-vr',
90 {'requiredFeatures': ['local'],
91 'optionalFeatures': ['secondary-views']});