<html>
    <head>
        <script src="../../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.testRunner) {
        testRunner.dumpAsText();
        testRunner.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(1);

        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");

    testRunner.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>
