<!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>

