| <!DOCTYPE html> |
| <body> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src="resources/webxr_util.js"></script> |
| <script src="resources/webxr_test_constants.js"></script> |
| |
| <script> |
| let immersiveTestName = "XRSession requestAnimationFrame callbacks can be " |
| + "unregistered with cancelAnimationFrame for immersive sessions"; |
| let nonImmersiveTestName = "XRSession requestAnimationFrame callbacks can be " |
| + "unregistered with cancelAnimationFrame for non-immersive sessions"; |
| |
| let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; |
| |
| let testFunction = (session) => new Promise((resolve, reject) => { |
| |
| // Schedule and immediately cancel animation frame |
| session.cancelAnimationFrame(session.requestAnimationFrame( |
| (time, vrFrame) => { reject("Cancelled frame callback was called"); })); |
| |
| let counter = 0; |
| let handle; |
| function onFrame(time, vrFrame) { |
| // Cancel the second animation frame. |
| if (handle != 0) { |
| session.cancelAnimationFrame(handle); |
| handle = 0; |
| } |
| |
| // Run a few more animation frames to be sure that the cancelled frame isn't |
| // going to call. |
| counter++; |
| if (counter >= 4) { |
| // Ok, we're done here. |
| resolve(); |
| } else { |
| session.requestAnimationFrame(onFrame); |
| } |
| } |
| |
| // Schedule two animation frame and cancel one during on animation frame. |
| session.requestAnimationFrame(onFrame); |
| handle = session.requestAnimationFrame( |
| (time, vrFrame) => { reject("Cancelled frame callback was called"); }); |
| }); |
| |
| xr_session_promise_test(immersiveTestName, testFunction, |
| fakeDeviceInitParams, 'immersive-vr'); |
| xr_session_promise_test(nonImmersiveTestName, testFunction, |
| fakeDeviceInitParams, 'inline'); |
| |
| </script> |
| </body> |
| |