<body>
<p>Test that workers stay reachable via message ports.
Should print "DONE" when done.</p>
<div id=result></div>
<script>
function log(message)
{
    document.getElementById("result").innerHTML += message + "<br>";
}

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

// Test that workers stay alive even though they are only reachable via message ports.
var worker = new Worker("resources/worker-messageport.js");
var channel = new MessageChannel();
worker.postMessage("port", channel.port1);
worker = 0;

channel.port2.postMessage("ping");
channel.port2.onmessage = function(evt) {
    // Other side is running, now force a GC, wait a bit, and send a new message to make sure it arrives.
    gc();
    setTimeout(testReachable, 100);
}

function testReachable()
{
    channel.port2.onmessage = function(evt) {
        log("PASS: Worker is reachable.");
        done();
    }
    channel.port2.postMessage("ping");
}

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 done()
{
    log("DONE");
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

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

