blob: acc371cc40a12581de6e3a6b28a274bdd57b8738 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/device/vr/public/mojom/vr_service.mojom.js"></script>
<script src="../external/wpt/resources/chromium/webxr-test.js"></script>
<script src="resources/vr-test-utils.js "></script>
<script src="resources/test-constants.js"></script>
<script>
let fakeDisplays = fakeVRDisplays();
vr_test( (t, device_controller) => {
return navigator.getVRDisplays().then( (displays) => {
var display = displays[0];
var expected_pose = VALID_POSE;
var fd = new VRFrameData();
var counter = 0;
function onFrame() {
if (counter == 0) {
t.step( () => {
assert_false(display.getFrameData(fd));
}, "Expecting to not get framedata since there is no pose");
device_controller.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++;
// Use rAF late so that the mock's setPose above can supply its data
// before RequestVSync calls GetPose. This is an artifact of the mocking
// framework, the real implementation doesn't have this restriction.
display.requestAnimationFrame(onFrame);
}
display.requestAnimationFrame(onFrame);
}, (err) => {
t.step( () => {
assert_unreached("getVRDisplays rejected");
});
});
}, [fakeDisplays["Pixel"]],
"getFrameData updates on the next frame");
</script>