<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 translationAmount = 50;
            var cancelPos = searchCancelButtonPosition(target);
            eventSender.mouseMoveTo(cancelPos.x + translationAmount, cancelPos.y + translationAmount);
            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>
