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

function removeAndReplaceIframe() {
    document.body.removeChild(document.getElementById("iframe"));
    var newIframe = document.createElement("iframe");
    newIframe.src = "resources/iframe304.py";
    newIframe.onload = function() { setTimeout(finish, 0); }
    document.body.appendChild(newIframe);
}

function finish() {
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
</head>
<body onload="setTimeout(removeAndReplaceIframe, 0)">
<iframe id="iframe" src="resources/iframe304.py"></iframe>
</body>
</html>
