<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <style>
        body {
            height: 2000px;
        }
        
        .scroller {
            width: 620px;
            height: 120px;
            border: 1px solid black;
            overflow-x: scroll;
            scroll-snap-type: x mandatory;
        }
        
        .contents {
            width: 200%;
        }
        
        .box {
            scroll-snap-align: start;
            width: 100px;
            height: 100px;
            margin: 10px;
            background-color: blue;
            display: inline-block;
        }
        
        .scroller.changed .box {
            width: 110px;
        }
        
    </style>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        var jsTestIsAsync = true;

        var scroller;
        var beforeChangeScrollLeft;
        async function scrollTest()
        {
            if (!window.eventSender) {
                finishJSTest();
                return;
            }
            
            eventSender.monitorWheelEvents();
            eventSender.mouseMoveTo(20, 20);
            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, "began", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(-20, 0, "changed", "none");

            await UIHelper.waitForEvent(scroller, 'scroll');
            await UIHelper.animationFrame();

            beforeChangeScrollLeft = scroller.scrollLeft;
            shouldBeTrue('beforeChangeScrollLeft > 0');

            scroller.classList.add('changed');
            await UIHelper.animationFrame();
            shouldBe('beforeChangeScrollLeft', 'scroller.scrollLeft');

            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");
            await UIHelper.waitForScrollCompletion();

            finishJSTest();
        }

        window.addEventListener('load', () => {
            scroller = document.querySelector('.scroller');
            setTimeout(scrollTest, 0);
        }, false);
    </script>
</head>
<body>
    <div class="scroller">
        <div class="contents">
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
            <div class="box"></div>
        </div>
    </div>
    <div id="console"></div>
    <script src="../../../resources/js-test-post.js"></script>
</body>
</html>
