<!DOCTYPE html>

<html>
<head>
    <style>
        #scrolling {
            height: 300px;
            width: 300px;
            border: 100px solid gray;
            border-left-width: 0px;
            border-right-width: 0px;
            overflow-y: scroll;
        }
        
        .content {
            height: 1000px;
            width: 100%;
            background-image: repeating-linear-gradient(silver, white 200px);
        }
    </style>
    <script>
        function checkForScroll()
        {
            var scroller = document.getElementById("scrolling");
            var expectedScrollTop = 700;
            
            if (scroller.scrollTop == expectedScrollTop)
                document.getElementById('result').textContent = "PASS: scrollTop was " + expectedScrollTop;
            else
                document.getElementById('result').textContent = "FAIL: scrollTop was " + scroller.scrollTop;

            testRunner.notifyDone();
        }
        
        function scrollTest()
        {
            eventSender.mouseMoveTo(100, 120);

            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, -3, 'none', 'begin');
            
            let remainingScrolls = 15;
            let sendMomentumScroll = function() {
                eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
                if (!--remainingScrolls) {
                    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
                    eventSender.callAfterScrollingCompletes(checkForScroll);
                    return;
                }
                requestAnimationFrame(sendMomentumScroll);
            }
            requestAnimationFrame(sendMomentumScroll);
        }

        function startTest()
        {
            if (window.eventSender) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();

                eventSender.monitorWheelEvents();
                setTimeout(scrollTest, 0);
            }
        }
        
        window.addEventListener('load', startTest, false);
    </script>
</head>
<body>
<div id="scrolling">
    <div class="content"></div>
</div>
<div id="result"></div>
</body>
</html>
