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

  <script>
    const testName = "Immersive session ends when device is disconnected";
    let watcherDone = new Event("watcherdone");
    const fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

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

      let xrWatcher = new EventWatcher(t, navigator.xr, ["devicechange"]);
      let xrPromise = xrWatcher.wait_for(["devicechange"]);

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

      session.addEventListener("end", onSessionEnd, false);

      // The javascript needs to yield so that the event registration processes.
      t.step_timeout(() => { testDeviceController.disconnect(); }, 0);

      return Promise.all([sessionPromise, xrPromise]);
    };

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