<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Search Field with Transform</title>
    <script src="resources/common.js"></script>
</head>
<body>
    <p>
        Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=22190">https://bugs.webkit.org/show_bug.cgi?id=22190</a>:<br>
        Tests drawing and event handling on transformed search fields.
    </p>
    <p style="-webkit-transform: translate(50px, 50px);">
        <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, cancelPos.y);
            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>
