| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="resources/fake-vr-displays.js"></script> |
| <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> |
| <script src="file:///gen/device/vr/vr_service.mojom.js"></script> |
| <script src="resources/mock-vr-service.js"></script> |
| <script src="resources/test-constants.js"></script> |
| <script> |
| let fakeDisplays = fakeVRDisplays(); |
| |
| vr_test( (t, mock_service) => { |
| return navigator.getVRDisplays().then( (displays) => { |
| var display = displays[0]; |
| var expected_pose = VALID_POSE; |
| var fd = new VRFrameData(); |
| var counter = 0; |
| |
| function onFrame() { |
| display.requestAnimationFrame(onFrame); |
| if (counter == 0) { |
| t.step( () => { |
| assert_false(display.getFrameData(fd)); |
| }, "Expecting to not get framedata since there is no pose"); |
| mock_service.mockVRDisplays_[0].setPose(expected_pose); |
| t.step( () => { |
| assert_false(display.getFrameData(fd)); |
| }, "Does not update within the same frame"); |
| } else { |
| t.step( () => { |
| assert_true(display.getFrameData(fd)); |
| assert_not_equals(fd.pose, null); |
| for (let field in expected_pose) { |
| assert_equals(fd.pose[field].length, expected_pose[field].length); |
| for (let i = 0; i < expected_pose[field].length; i++) { |
| assert_approx_equals(fd.pose[field][i], expected_pose[field][i], |
| FLOAT_EPSILON); |
| } |
| } |
| }, "Pose was updated in the next frame"); |
| t.done(); |
| } |
| counter++; |
| } |
| |
| display.requestAnimationFrame(onFrame); |
| }, (err) => { |
| t.step( () => { |
| assert_unreached("getVRDisplays rejected"); |
| }); |
| }); |
| }, [fakeDisplays["Pixel"]], |
| "getFrameData updates on the next frame"); |
| |
| </script> |