<html>
<head>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.setCanOpenWindows();
    testRunner.waitUntilDone();
}

addEventListener('message', function(e) {
    simulateClick('button2');
}, false);

function runTest()
{
    if (!eventSender)
        return;

    simulateClick('button1');
}

function simulateClick(id)
{
    var rect = document.getElementById(id).getBoundingClientRect();
    eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

function submitTo(target)
{
    document.test.target = target;
    document.test.submit();
}

</script>
</head>
<body onload="runTest()">
<p>This test ensures that multiple form submission protection is correctly reset on mouse events. To test manually:
<ol>
<li>Click on "Click 1" to submit form to a new window. The window will close immediately.
<li>Click on "Click 2" to submit form to this window. Single word "SUCCESS" should replace the contents of this document.
</ol>
<p>If either event doesn't occur, the test has failed.
<form method="post" name="test" action="data:text/html,<script>if (opener) { opener.postMessage('trololo', '*'); window.close(); } else { document.write('SUCCESS'); window.testRunner && testRunner.notifyDone(); }</script>">
<input type="button" id="button1" value="Click 1" onclick="submitTo('_new')">
<input type="button" id="button2" value="Click 2" onclick="submitTo('_self')">
</form>
</body>
</html>