<!DOCTYPE html>
<html dir="rtl">
<head>
    <link rel="stylesheet" href="resources/scrollable-style.css">
    <script src="../../resources/js-test-pre.js"></script>
    <style>
    .origin {
        position: absolute;
        top: 0;
        left: 0;
        height: 10px;
        width: 10px;
        background-color: blue;
    }
    
    .wide {
        width: 1200px;
        height: 10px;
        background-color: silver;
    }
    iframe {
        position: absolute;
    }
    </style>
    <script>
    var pageScrollPositionBefore;
    var iframeScrollPositionBefore;
    
    function checkForScroll()
    {
        // The iframe should have scrolled, but not the main page.
        var iframeScrollPositionAfter = window.frames['target'].document.scrollingElement.scrollTop;

        if (iframeScrollPositionBefore != iframeScrollPositionAfter)
            testPassed("iframe received wheel events.");
        else
            testFailed("iframe did not receive wheel events.");

        testRunner.notifyDone();
    }

    function scrollTest()
    {
        pageScrollPositionBefore = document.scrollingElement.scrollTop;

        var iframeTarget = document.getElementById('target');
        iframeScrollPositionBefore = iframeTarget.contentDocument.scrollingElement.scrollTop;

        var startPosX = iframeTarget.offsetLeft + 20;
        var startPosY = iframeTarget.offsetTop + 20;
        eventSender.mouseMoveTo(startPosX, startPosY);
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
        setTimeout(checkForScroll, 100);
    }
    
    function startTest()
    {
        if (window.eventSender) {
            testRunner.waitUntilDone();
            setTimeout(scrollTest, 0);
        }
    }
    
    window.addEventListener('load', startTest, false);
    </script>
</head>
<body>
    <div class="wide">
    <div class="origin"></div>

    <iframe id="target" name="target" style="border:solid 1px green; height: 300px; width: 300px;" 
        src= "data:text/html,
            <html>
                <head>
                    <style>div { width: 400px; height: 1000px; background-color: green; } </style>
                </head>
                <body>
                    <div></div>
                </body>
            </html>">
    </iframe>
    <div id='console'></div>
</html>
