| <!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> |
| let fakeDisplays = fakeVRDisplays(); |
| |
| vr_test( (t) => { |
| return navigator.getVRDisplays().then( (displays) => { |
| let display = displays[0]; |
| |
| function onAnimationFrameBad() { |
| t.step( () => { |
| assert_unreached(); |
| }, "Unregistered callback was called"); |
| t.done(); |
| } |
| |
| let counter = 0; |
| function onAnimationFrameGood() { |
| counter++; |
| if (counter >= 4) { |
| t.done(); |
| // Intentionally don't return immediately so that display.rAF gets |
| // called again to make sure it doesn't cause unexpected behavior like |
| // it did with crbug.com/679401 |
| } |
| display.requestAnimationFrame(onAnimationFrameGood); |
| } |
| |
| let handle = display.requestAnimationFrame(onAnimationFrameBad); |
| display.cancelAnimationFrame(handle); |
| display.requestAnimationFrame(onAnimationFrameGood); |
| }, (err) => { |
| t.step( () => { |
| assert_unreached("getVRDisplays rejected"); |
| }); |
| t.done(); |
| }); |
| }, [fakeDisplays["Pixel"]], |
| "requestAnimationFrame callbacks can be unregistered with cancelAnimationFrame"); |
| |
| </script> |