<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

var port;
var gc_stuff = new Array();

gc_and_crash = function() {
    if (this.GCController)
        GCController.collect();
    else {
        // V8 needs that many objects to run GC.
        for(i = 0; i < 100000; i++) {
            p = new Object();
            gc_stuff.push(p);
            gc_stuff.push(p + p);
        }
    }

    // If the bug 43140 is regressed, this will crash, at least in v8-based ports.
    port.start();

    document.getElementById("log").innerText = "PASS";
    if (window.testRunner)
        testRunner.notifyDone();
}

function test() {
    var iframe = document.getElementById("iframe");
    var channel = new iframe.contentWindow.MessageChannel();
    port = channel.port1;

    iframe.onload = function() { gc_and_crash(); }
    iframe.src = "data:text/html,<body>Hello!" ;
}
</script>
<body onload="test()">
<p>Test that MessagePort is properly closed when its owning context goes away. The test succeeds if it doesn't crash and prints "PASS" below. See https://bugs.webkit.org/show_bug.cgi?id=43140 for more details.</p>
<pre id=log></pre>
<iframe style="display:none" id=iframe></iframe>