<html>
<head>
<script>
var blob = new Blob([]);
var url = null;
var count = 0;

if (!window.gc)
{
    window.gc = function()
    {
        if (window.GCController)
            return GCController.collect();
        for (var i = 0; i < 10000; i++)
            var s = new String("abc");
    }
}

function load()
{
    if (window.testRunner)
    {
        testRunner.dumpAsText();
        testRunner.setCanOpenWindows();
        testRunner.setCloseRemainingWindowsWhenComplete(true);
        testRunner.waitUntilDone();
    }
    win = window.open();
    if (win.URL)
    {
        url = win.URL;
        win.location = "nothing";
        setTimeout(crash, 0);
        return;
    }
    document.body.innerHTML = "PASS";
    if (window.testRunner)
        testRunner.notifyDone();
}

function crash()
{
    gc();
    url.createObjectURL(blob);
    if (count++ < 5)
    {
        setTimeout(crash, 0);
        return;
    }
    document.body.innerHTML = "PASS";
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</head>
<body onload="load()">
RUNNING...
</body>
</html>

