<!DOCTYPE html>
<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>
<canvas />

<script>
let immersiveTestName = "XRSession requestAnimationFrame must fail if the session has "
  + "no baseLayer for immersive";

let nonImmersiveTestName = "XRSession requestAnimationFrame must fail if the session has "
  + "no baseLayer for non immersive";

let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

let testFunction = (session, controller, t, sessionObjects) => new Promise((resolve, reject) => {
  // Clear the base layer that the boilerplate sets.  This ensures that the rAF
  // won't fire.  If the fire *does* fire, it will fail because the baseLayer
  // won't match the new baselayer we later create.
  session.updateRenderState({
    baseLayer: null
  });
  let webglCanvas = document.getElementsByTagName('canvas')[0];
  let gl = sessionObjects.gl;

  // Session must have a baseLayer or frame requests will be ignored.
  let webglLayer = new XRWebGLLayer(session, gl);

  function onEarlyFrame(time, vrFrame) {
    // We shouldn't be allowed to reach this callback with no baseLayer
    t.step(() => {
      assert_equals(session.renderState.baseLayer, webglLayer);
    });
    resolve();
  }

  // This callback shouldn't go through, since the session doesn't
  // have a baseLayer when this call is made.
  let handle = session.requestAnimationFrame(onEarlyFrame);
  // Should still give us a valid handle, though.
  assert_not_equals(handle, 0);

  // Wait for a bit and set the baseLayer.
  t.step_timeout(() => {
    // Once the base layer is set the previously registered callback should run.
    session.updateRenderState({
        baseLayer: webglLayer
    });
  }, 300);
});

xr_session_promise_test(
  immersiveTestName, testFunction, fakeDeviceInitParams, 'immersive-vr');
xr_session_promise_test(
  nonImmersiveTestName, testFunction, fakeDeviceInitParams, 'inline');

</script>
