<html>
<head>
    <script src="resources/print.js"></script>
    <script>
        if (window.layoutTestController)
            layoutTestController.dumpAsText();

        document.addEventListener("beforeload", function(event) {
            if (event.target && event.target.parentElement)
                event.target.parentElement.removeChild(event.target);
                // Note, we intentionally do not cancel the load here,
                // WebCore should automatically cancel it.
                // Otherwise DRT will print:
                // Blocked access to external URL http://webkit.org/
        }, true);
    </script>
</head>
<body>
    <p>This page tests that you can correctly remove an iframe element in its beforeload listener without causing a crash.</p>
    <iframe src="http://webkit.org"></iframe>
    <div id="console"></div>
    <script>
        if (document.getElementsByTagName("iframe").length)
            print("FAIL", "red");
        else
            print("PASS", "green");
    </script>
</body>
</html>
