<!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 id="webgl-canvas"></canvas>

<script>
let testName = "Ensures that the XRSession's visibilityState is correctly "
  + "reported and that the associated visibilitychange event fires.";

let watcherDone = new Event("watcherdone");
let frameFired = new Event("framefired");

let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

let testFunction = function(session, fakeDeviceController, t) {
  let eventWatcher = new EventWatcher(
    t, session, ["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);
  let eventPromise = eventWatcher.wait_for(
    ["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);

  function onFrame(timestamp, frame) {
    t.step( () => {
      // The session should not fire any animation frames while the visibility
      // state is hidden.
      assert_not_equals(session.visibilityState, "hidden");
    });

    // Make sure the frame does fire when the visibility is changed back to "visible"
    session.dispatchEvent(frameFired);
  }

  function onSessionVisibilityChangeHidden(event) {
    t.step( () => {
      assert_equals(session.visibilityState, "hidden");
    });

    session.removeEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
    session.addEventListener("visibilitychange", onSessionVisibilityChangeVisible, false);

    session.requestAnimationFrame(onFrame)

    t.step_timeout(() => {
      fakeDeviceController.simulateVisibilityChange("visible");
    }, 300);
  }

  function onSessionVisibilityChangeVisible(event) {
    t.step( () => {
      assert_equals(session.visibilityState, "visible");
    });

    session.removeEventListener("visibilitychange", onSessionVisibilityChangeVisible, false);
    session.addEventListener("visibilitychange", onSessionVisibilityChangeInvalid, false);
    fakeDeviceController.simulateVisibilityChange("visible");

    t.step_timeout(() => {
      session.dispatchEvent(watcherDone);
    }, 300);
  }

  function onSessionVisibilityChangeInvalid(event) {
    t.step( () => {
      assert_not_reached("Should not fire visibilitychange events for the same state");
    });
  }

  t.step( () => {
    // Session visibility should start out as "visible"
    assert_equals(session.visibilityState, "visible");
  });

  session.addEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
  fakeDeviceController.simulateVisibilityChange("hidden");

  return eventPromise;
};

xr_session_promise_test(
  testName, testFunction, fakeDeviceInitParams, 'immersive-vr');

</script>
