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