<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../resources/common.js"></script>
<script>
window.jsTestIsAsync = true;

var password;
var event;

window.onload = function ()
{
    password = document.getElementById("password");
    password.onclick = checkEventAndDone;

    runTest();
};

function runTest()
{
    if (!window.internals || !window.eventSender)
        return;

    internals.setShowAutoFillButton(password, "Credentials");

    var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-credentials-auto-fill-button");
    autoFillButton.onclick = checkEventAndDone;

    eventSender.mouseMoveTo(password.offsetLeft + 10, password.offsetTop + password.offsetHeight / 2);
    eventSender.mouseDown();
    eventSender.leapForward(100);
    eventSender.mouseMoveTo(autoFillButton.offsetLeft + autoFillButton.offsetWidth / 2, autoFillButton.offsetTop + autoFillButton.offsetHeight / 2);
    eventSender.mouseUp();
}

function checkEventAndDone(e)
{
    event = e;
    shouldBeEqualToString("event.type", "click");
    shouldBe("event.target", 'document.getElementById("password")');
    finishJSTest();
}
</script>
</head>
<body>
<p id="description"></p>
<input type="password" id="password">
<div id="console"></div>
<script>
description("This test checks that pressing the mouse in an password field and releasing the mouse on the AutoFill " +
            "button dispatches a DOM click event at the password field and not at the AutoFill button. This test " +
            "can only be run in the test tool.");
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
