<html>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
    </head>
    <body>
        <textarea id="test" width="100" onfocus="popup()" onblur="popup()"></textarea>
        <div id="console"></div>

        <script>
            var win;
            function popup() {
                win = window.open("about:blank", "blank");
                shouldBeNull("win");
            }

            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.setCanOpenWindows();
                testRunner.setPopupBlockingEnabled(true);
                testRunner.setCloseRemainingWindowsWhenComplete(true);
                testRunner.waitUntilDone();
            }

            document.getElementById("test").focus();
            document.getElementById("test").blur();

            if (window.testRunner)
                testRunner.notifyDone();
        </script>
    </body>
</html>
