<!DOCTYPE html>
<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        var newWindow;
        
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.setCanOpenWindows();
            testRunner.waitUntilDone();
            testRunner.setPopupBlockingEnabled(true);
        }
    
        function clickHandler() {
            setTimeout(function() {
                newWindow = window.open("about:blank");
                self.focus();
                debug("Test calling window.open() with a 0 ms delay. A popup should be allowed.")
                shouldBeNonNull("newWindow");
                if (window.testRunner)
                    testRunner.notifyDone();
            }, 0);
        }
        
        function clickButton() {
            var button = document.getElementById("test");
            var buttonX = button.offsetLeft + button.offsetWidth / 2;
            var buttonY = button.offsetTop + button.offsetHeight / 2;
            if (window.eventSender) {
                eventSender.mouseMoveTo(buttonX, buttonY);
                eventSender.mouseDown();
                eventSender.mouseUp();
            }
        }        
    </script>
</head>
<body onload="clickButton()">
    <button id="test" onclick="clickHandler()">Click Here</button>
    <div id="console"></div>
</body>
