<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>
function gc()
{
    if (window.GCController)
        return GCController.collect();

    for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
        var s = new String("abc");
    }
}

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>
