<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->

<html>
<meta name="viewport" content="initial-scale=1.0, width=device-width">
<head>
    <script id="ui-script" type="text/plain">
        (function() {
            uiController.singleTapAtPoint(50, 50, function() {});
            uiController.singleTapAtPoint(50, 50, function() {
                uiController.uiScriptComplete();
            });
        })();
    </script>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        var target;

        function getUIScript()
        {
            return document.getElementById("ui-script").text;
        }

        function runTest()
        {
            target = document.getElementById("target");
            target.addEventListener("click", handleClick, false);

            if (!window.eventSender || !testRunner.runUIScript)
                return;

            testRunner.runUIScript(getUIScript(), function() {});
        }

        function handleClick(event)
        {
            target.textContent = "PASS: Click fired on element with handler.";
            testRunner.notifyDone();
        }
    </script>
    <style>
        body {
            margin: 0;
        }
        #target {
            height: 100px;
            width: 100px;
            background-color: silver;
        }
    </style>
</head>
<body onload="runTest()">
<div id="target"></div>
<div id="description">This document is set up to enable fast clicks. Double
tapping on the rectangle above should send a click event, not trigger a
zoom.</div>
</body>
</html>
