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

gc = window.gc || function()
{
    if (window.GCController)
        return GCController.collect();
    
    for (var i = 0; i < 10000; ++i)
        var s = new String("AAAA");
}

window.onload = function()
{
    object = document.createElement("object");
    object.setAttribute("form", "a");
    
    attr = document.createAttribute("width");
    object.setAttributeNode(attr);

    embed = document.createElement("embed");
    embed.setAttribute("width", 2);
    embed.setAttribute("type", "image/png");
    object.appendChild(embed);
    
    document.body.appendChild(object);
    
    object = embed = attr = null;
    gc();
    
    setTimeout(finishTest, 0);
}

finishTest = function()
{
    form = document.createElement("form");
    form.id = "form";
    document.body.appendChild(form);
    
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</head>
<body>PASS</body
</html>
