<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Search Field with Transform</title>
    <style type="text/css" media="screen">
      html {
        zoom: 120%;
      }
    </style>
    <script src="resources/common.js"></script>
</head>
<body>
    <p>
        Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=24733">https://bugs.webkit.org/show_bug.cgi?id=24733</a>:<br>
        Tests event handling on search fields with zoom.
    </p>
    <p>
        <input type="search" id="target" results="5" value="Search me">
    </p>
    <p id="result" style="margin-top: 60px">
        Clicking the (x) button should clear the field.
    </p>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();
        if (window.eventSender) {
            var target = document.getElementById("target");
            var cancelPos = searchCancelButtonPosition(target);
            eventSender.mouseMoveTo(cancelPos.x * 1.2, cancelPos.y * 1.2);
            eventSender.mouseDown();
            eventSender.mouseUp();
            var result = document.getElementById("result");
            if (target.value == "")
                result.innerText = "PASS";
            else
                result.innerText = "FAIL";
            
            target.value = "Some other text";
        }
    </script>
</body>
</html>
