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

<script>

const testFunctionCpu = function (session, controller, t) {
  return session.requestReferenceSpace('viewer').then((viewerSpace) => {
    let done = false;

    session.requestAnimationFrame((time, frame) => {
      const pose = frame.getViewerPose(viewerSpace);
      for(const view of pose.views) {
        assert_throws_dom("NotSupportedError", () => frame.getDepthInformation(view),
                          "getDepthInformation() should throw when depth sensing is disabled");
      }

      done = true;
    });

    return t.step_wait(() => done);
  });
};

const testFunctionGpu = function (session, controller, t, sessionObjects) {
  return session.requestReferenceSpace('viewer').then((viewerSpace) => {
    let done = false;

    const glBinding = new XRWebGLBinding(session, sessionObjects.gl);

    session.requestAnimationFrame((time, frame) => {
      const pose = frame.getViewerPose(viewerSpace);
      for(const view of pose.views) {
        t.step(() => {
          assert_throws_dom("NotSupportedError", () => glBinding.getDepthInformation(view),
                            "getDepthInformation() should throw when depth sensing is disabled");
        });
      }

      done = true;
    });

    return t.step_wait(() => done);
  });
};

xr_session_promise_test(
  "XRFrame.getDepthInformation() rejects if depth sensing is not enabled on a session",
  testFunctionCpu,
  IMMERSIVE_AR_DEVICE,
  'immersive-ar');

xr_session_promise_test(
  "XRWebGLBinding.getDepthInformation() rejects if depth sensing is not enabled on a session",
  testFunctionGpu,
  IMMERSIVE_AR_DEVICE,
  'immersive-ar');

</script>
