summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html')
-rw-r--r--testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html80
1 files changed, 80 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html b/testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html
new file mode 100644
index 0000000000..d6d8690807
--- /dev/null
+++ b/testing/web-platform/tests/webxr/camera-access/xrCamera_resolution.https.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/webxr_util.js"></script>
+<script src="../resources/webxr_test_asserts.js"></script>
+<script src="../resources/webxr_test_constants.js"></script>
+<script src="../resources/webxr_test_constants_fake_world.js"></script>
+
+<script>
+
+const fakeDeviceInitParams = {
+ supportedModes: ["immersive-ar"],
+ views: VALID_VIEWS,
+ supportedFeatures: ALL_FEATURES,
+};
+
+const test_camera_present = (session, fakeDeviceController, t) => {
+ return session.requestReferenceSpace('viewer').then(viewerRefSpace => {
+ return new Promise((resolve, reject) => {
+ const requestAnimationFrameCallbackWithCamera = (time, frame) => {
+ const viewerPose = frame.getViewerPose(viewerRefSpace);
+
+ t.step(() => {
+ let foundCamera = false;
+
+ assert_not_equals(viewerPose, null, "Viewer pose should not be null!");
+ assert_equals(viewerPose.views.length, VALID_VIEWS.length, "View lengths should match!");
+
+ for (const view of viewerPose.views) {
+ if (view.camera) {
+ assert_equals(view.camera.width, 333, "Width doesn't match expectations!");
+ assert_equals(view.camera.height, 444, "Height doesn't match expectations!");
+
+ foundCamera = true;
+ }
+ }
+
+ assert_true(foundCamera, "There should be at least one camera! Didn't find any.")
+ });
+
+ resolve();
+ };
+
+ const requestAnimationFrameCallbackNoCamera = (time, frame) => {
+
+ const viewerPose = frame.getViewerPose(viewerRefSpace);
+ t.step(() => {
+ assert_not_equals(viewerPose, null, "Viewer pose should not be null!");
+ assert_equals(viewerPose.views.length, VALID_VIEWS.length, "View lengths should match!");
+
+ for (const view of viewerPose.views) {
+ assert_equals(view.camera, null, "Camera should be null!");
+ }
+ });
+
+ const views_with_camera = VALID_VIEWS.map((element, index) => {
+ return {
+ ...element,
+ resolution: { width: 111 * (index+1), height: 222 * (index+1)},
+ cameraImageInit: { width: 333, height: 444 },
+ };
+ });
+ fakeDeviceController.setViews(views_with_camera);
+
+ // After this rAFcb, the test is supposed to continue w/ a callback that
+ // expects XRCamera to be present:
+ session.requestAnimationFrame(requestAnimationFrameCallbackWithCamera);
+ };
+
+ // Kick off the test - start with rAFcb w/o an XRCamera:
+ session.requestAnimationFrame(requestAnimationFrameCallbackNoCamera);
+ });
+ });
+};
+
+xr_session_promise_test("XRCamera object is present and carries expected dimensions",
+ test_camera_present,
+ fakeDeviceInitParams, 'immersive-ar', {'requiredFeatures': ['camera-access']});
+
+</script> \ No newline at end of file