<p>This test verifies that the load event doesn't fire until subresource content has loaded, even if you manually call document.close beforehand. See <a href="http://bugs.webkit.org/show_bug.cgi?id=13241">bug 13241</a>.</p>
<hr>
<pre id="console"></pre>

<iframe></iframe>

<script>
function log(s)
{
    document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
}

function getDimensions()
{
    var image = frames[0].document.images[0];
    return "{ " + image.width + " x " + image.height + " }";
}

function beforeOnload()
{
    log("dimensions before onload (should be { 0 x 0 }, otherwise the test will falsely pass): " + getDimensions());
}

function afterOnload()
{
    log("dimensions during onload (should be { 215 x 174 }, otherwise onload fired too early): " + getDimensions());
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

function runTest()
{
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();

        // Quirkily, the FrameLoadDelegate API considers our <iframe> fully loaded 
        // once it has loaded its initial empty document. So, if we want DumpRenderTree 
        // to wait for the load event caused by our document.close() before dumping,
        // we need to tell it so explicitly.
        layoutTestController.waitUntilDone();
    }

    var doc = frames[0].document;
    doc.open();
    doc.write("<body onload=\"parent.afterOnload()\">");
    doc.write("<img src=\"resources/onload-image.png\">");
    doc.write("<script\>parent.beforeOnload();</script\>");
    doc.write("</body>");
    doc.close();
}

runTest();
</script>
