<script src="../../resources/js-test.js"></script>
<p id="description"></p>
<iframe id="frame" src="resources/iframe-mousewheel.html"></iframe>
<div id="console"></div>
<script>
if (window.testRunner)
    testRunner.waitUntilDone();

var testFinished = false;

description("This test can be used to verify that a mousewheel event is fired when wheeling over the subframe but not dispatched to the parent frame.");

document.addEventListener("wheel", function() {
    testFailed("Received wheel event in parent");
    if (window.testRunner)
        testRunner.notifyDone();
});

function iframeMouseWheel()
{
    if (testFinished)
        return;
    testFinished = true;
    setTimeout(done, 0);
}

function done()
{
    testPassed("received mousewheel event.");
    if (window.testRunner)
        testRunner.notifyDone();
}

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

    var frame = document.getElementById("frame");
    var centerX = frame.offsetLeft + frame.offsetWidth / 2;
    var centerY = frame.offsetTop + frame.offsetHeight / 2;
    eventSender.mouseMoveTo(centerX, centerY);
    eventSender.mouseScrollBy(0, 53);
}

window.onload = runTest;
</script>
