<html>
    <head>
        <script src="../js/resources/js-test-pre.js"></script>
    </head>

<body>
<p>Test for bugs 
<a href="http://code.google.com/p/chromium/issues/detail?id=87473">cr 87473</a>, <a href="https://bugs.webkit.org/show_bug.cgi?id=64882">64882</a>.

<p id="description"></p>
<iframe style='height: 50; width: 50; top:100;left:100; position:absolute; border-width:0' src='resources/mouseover-button-iframe.html'
    ></iframe>
<div id="console"></div>

<script>

document.events = {};
document.saveWhere = null;

function runTest() {
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();

        eventSender.mouseMoveTo(1,1);
        eventSender.mouseDown();
        eventSender.mouseUp();

        state('A-no-press');
        
        eventSender.mouseMoveTo(125, 125);

        state('B-left');
        eventSender.mouseDown(0);
        eventSender.mouseMoveTo(300, 300);

        eventSender.mouseMoveTo(125, 125);

        eventSender.mouseMoveTo(1, 1);
        eventSender.mouseUp();

        state('C-no-press');
        eventSender.mouseMoveTo(125, 125);

        state('D-middle');
        eventSender.mouseDown(1);
        eventSender.mouseMoveTo(300, 300);
        eventSender.mouseMoveTo(125, 125);

        eventSender.mouseUp();

        eventSender.mouseMoveTo(1, 1);

        window.setTimeout('finish()', 0);
    }
}

function state(name)
{
    document.saveWhere = name;
    document.events[name] = null;
}

function finish()
{
    shouldBe("document.events['A-no-press'].which", "0");
    shouldBe("document.events['B-left'].which", "1");
    shouldBe("document.events['C-no-press'].which", "0");
    shouldBe("document.events['D-middle'].which", "2");

    layoutTestController.notifyDone()
}

description("This test verifies that we get the correct button on mouseover events in .which when entering a document.");

window.onload = function()
{
    recentEvent = null;
    runTest();
}

</script>

</body>
</html>
