<!DOCTYPE html>
<body>
  <script src=/resources/testharness.js></script>
  <script src=/resources/testharnessreport.js></script>
  <script src="../../webxr/resources/webxr_util.js"></script>
  <script src="../../webxr/resources/webxr_test_constants.js"></script>
  <canvas></canvas>

  <script>
    const testName = "end event fires when immersive session ends and device reports when shutdown has completed";
    let watcherDone = new Event("watcherdone");
    const fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

    let testFunction = function(session, testDeviceController, t) {
      testDeviceController.setSupportsShutdownNotification();
      let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]);
      let eventPromise = eventWatcher.wait_for(["end", "watcherdone"]);

      function onSessionEnd(event) {
        t.step( () => {
          assert_equals(event.session, session);

          let eventSession = event.session;
          assert_equals(eventSession, event.session,
            "XRSessionEvent.session returns the same object.");

          session.dispatchEvent(watcherDone);
        });
      }
      session.addEventListener("end", onSessionEnd, false);
      session.end();

      return eventPromise;
    };

    xr_session_promise_test(testName, testFunction,
      fakeDeviceInitParams, 'immersive-vr');
  </script>
</body>
