<body>
<p>Test that destroying a document doesn't cause a crash when posting a message to a MessagePort it owned.</p>
<pre id=log></pre>
<script src="../../resources/gc.js"></script>
<script>

function log(message)
{
    document.getElementById("log").innerHTML += message + "<br>";
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

var mainPort;

function test()
{
    var channel = new MessageChannel;
    window.frames[0].postMessage("msg", "*", [channel.port2]);
    mainPort = channel.port1;
    mainPort.start();

    mainPort.postMessage("ping");
    mainPort.onmessage = test2;
}

function test2()
{
    var frameElement = document.getElementsByTagName("iframe")[0];
    frameElement.parentNode.removeChild(frameElement);
    frameElement = null;

    gc();
    setTimeout(test3, 10);
}

function test3()
{
    gc();
    mainPort.postMessage("ping");
    mainPort.onmessage = function(evt) {
        if (evt.data == "pong")
            log("Unexpected response: FAIL");
    };
    setTimeout(test4, 10);
}

function test4()
{
    mainPort.close();

    log("Didn't crash: SUCCESS");

    if (window.testRunner)
        testRunner.notifyDone();
}

</script>
<iframe src="resources/message-port-iframe.html" onload="test()"></iframe>
</body>
