<!DOCTYPE html>
<html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<button>click me</button>
<script type="module">
import {PresentationServiceMock, waitForClick} from './resources/presentation-service-mock.js';

const mock = new PresentationServiceMock();
const button = document.querySelector('button');

promise_test(async _ => {
  let receiverConnectionClosed = false;
  await waitForClick(button);
  const connection =
      await new PresentationRequest("https://example.com/").start();
  connection.onclose = closeEvent => {
    assert_equals(closeEvent.reason, "closed");
    assert_equals(closeEvent.message, "");
    assert_equals(connection.state, "closed");
  };

  // Open a receiver page and pass controller connection's
  // controllerConnectionPtr and receiverConnectionRequest to it.
  const w =
      window.open("resources/presentation-receiver-close-connection.html");
  w.controllerConnectionPtr = mock.getControllerConnectionPtr();
  w.receiverConnectionRequest = mock.getReceiverConnectionRequest();
  w.shouldCallClose = false;

  return new Promise(resolve => {
    window.addEventListener("message", e => {
      if (e.data == "receiver connection closed") {
        receiverConnectionClosed = true;
        resolve();
      } else if (e.data == "receiver connection ready") {
        connection.close();
        assert_equals(connection.state, "closed");
      }
    });
  });
}, "controller connection.close() should fire both controller's and receiver's onclose event handler");

</script>
</body>
</html>
