<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<input type=password>
<iframe srcdoc="<input type=text>"></iframe>
<script>

description("Verify that changing focus to a different frame updates secure input state.");

jsTestIsAsync = true;

window.onload = function() {

    passwordInput = document.getElementsByTagName("input")[0];
    iframeElement = document.getElementsByTagName("iframe")[0];
    textInput = frames[0].document.getElementsByTagName("input")[0];

    debug("Initial state, no selection:");
    shouldBe("testRunner.secureEventInputIsEnabled", "false");

    debug("\nA password input is focused:");
    passwordInput.focus();
    shouldBe("document.activeElement", "passwordInput");
    shouldBe("testRunner.secureEventInputIsEnabled", "true");

    debug("\nA regular text input is focused with a mouse click:");
    eventSender.mouseMoveTo(iframeElement.offsetLeft + textInput.offsetLeft + 5, iframeElement.offsetTop + textInput.offsetTop + 5);
    eventSender.mouseDown(0);
    eventSender.mouseUp(0);
    shouldBe("frames[0].document.activeElement", "textInput");
    shouldBe("testRunner.secureEventInputIsEnabled", "false");

    debug("\nA password input is focused again with a mouse click:");
    eventSender.mouseMoveTo(passwordInput.offsetLeft + 5, passwordInput.offsetTop + 5);
    eventSender.mouseDown(0);
    eventSender.mouseUp(0);
    shouldBe("document.activeElement", "passwordInput");
    shouldBe("testRunner.secureEventInputIsEnabled", "true");

    debug("\nA regular text input is focused with a tab:");
    eventSender.keyDown("\t");
    shouldBe("frames[0].document.activeElement", "textInput");
    shouldBe("testRunner.secureEventInputIsEnabled", "false");

    debug("\nA password input is focused again with a tab:");
    eventSender.keyDown("\t", ["Shift"]);
    shouldBe("document.activeElement", "passwordInput");
    shouldBe("testRunner.secureEventInputIsEnabled", "true");

    debug("\nFocus is made empty:");
    eventSender.mouseMoveTo(1, 1);
    eventSender.mouseDown(0);
    eventSender.mouseUp(0);
    shouldBe("document.activeElement", "document.body");
    shouldBe("testRunner.secureEventInputIsEnabled", "false");

    finishJSTest();
}

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
