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

    var counter = 0;
    var worker = new Worker("resources/wrapper-map-gc.js");

    // Post the message from worker back to the worker.
    // This will fire another onmessage event in the Worker and allocate more data.
    worker.onmessage = function(evt)
    {
        worker.postMessage(evt.data);
        // This appears to be enough to reliably trigger GC in a Worker (about 20Mb strings allocated).
        if (++counter > 20) {
            document.getElementById("result").innerText = "PASS";
            worker.terminate();
            if (window.testRunner) {
                testRunner.notifyDone();
            }
        }
    }
}
</script>
<body onload=test()>
<p>This test tries to cause GC in Worker context. It also fires events in the Worker, which allocates JS DOM Wrappers for Event object. As a result of GC, the maps that map wrappers to DOM Objects will be cleaned up. Test succeeds if it does not crash and prints 'PASS' at the end.</p>
<pre id="result"></pre>
</body>
</html>
