<!DOCTYPE html>
<meta charset=utf-8>
<link rel="help" href="https://html.spec.whatwg.org/multipage/comms.html#dom-messageport-close">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// How long (in ms) these tests should wait before deciding no further messages
// will be received.
const time_to_wait_for_messages = 100;

async_test(t => {
    const c = new MessageChannel();
    c.port1.onmessage = t.unreached_func('Should not have delivered message');
    c.port1.close();
    c.port2.postMessage('TEST');
    setTimeout(t.step_func_done(), time_to_wait_for_messages);
  }, 'Message sent to closed port should not arrive.');

async_test(t => {
    const c = new MessageChannel();
    c.port1.onmessage = t.unreached_func('Should not have delivered message');
    c.port2.close();
    c.port2.postMessage('TEST');
    setTimeout(t.step_func_done(), time_to_wait_for_messages);
  }, 'Message sent from closed port should not arrive.');

async_test(t => {
    const c = new MessageChannel();
    c.port1.onmessage = t.unreached_func('Should not have delivered message');
    c.port1.close();
    const c2 = new MessageChannel();
    c2.port1.onmessage = t.step_func(e => {
        e.ports[0].postMessage('TESTMSG');
        setTimeout(t.step_func_done(), time_to_wait_for_messages);
      });
    c2.port2.postMessage('TEST', [c.port2]);
  }, 'Message sent to closed port from transferred port should not arrive.');

async_test(t => {
    const c = new MessageChannel();
    let isClosed = false;
    c.port1.onmessage = t.step_func_done(e => {
        assert_true(isClosed);
        assert_equals(e.data, 'TEST');
      });
    c.port2.postMessage('TEST');
    c.port2.close();
    isClosed = true;
  }, 'Inflight messages should be delivered even when sending port is closed afterwards.');

async_test(t => {
    const c = new MessageChannel();
    c.port1.onmessage = t.step_func_done(e => {
        if (e.data == 'DONE') t.done();
        assert_equals(e.data, 'TEST');
        c.port1.close();
      });
    c.port2.postMessage('TEST');
    c.port2.postMessage('DONE');
  }, 'Close in onmessage should not cancel inflight messages.');

test(() => {
    const c = new MessageChannel();
    c.port1.close();
    assert_throws_dom("DataCloneError", () => self.postMessage(null, "*", [c.port1]));
    self.postMessage(null, "*", [c.port2]);
}, "close() detaches a MessagePort (but not the one its entangled with)");
</script>
