Bug 1770047 [wpt PR 34117] - [Clipboard API] Clipboard Web Custom Formats implementat...
[gecko.git] / testing / web-platform / tests / webxr / xrViewerPose_secondaryViews.https.html
blob446fedf14f353b241347d4deb9982981e6a3882f
1 <!DOCTYPE html>
2 <body>
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>
9 <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);
41 } else {
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) {
50 t.step(() => {
51 let pose = xrFrame.getViewerPose(referenceSpace);
52 if (!pose) {
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);
58 return;
61 if (session.mode == 'inline') {
62 verifyInlineViews(pose.views);
63 } else {
64 verifyImmersiveViews(
65 pose.views,
66 session.sessionInit['optionalFeatures'].includes('secondary-views'));
69 resolve();
70 });
72 session.requestAnimationFrame(onFrame);
73 }));
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']});
93 </script>
94 </body>