<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <style>
        body {
            height: 2000px;
        }
        
        .container {
            padding: 10px;
            margin: 20px;
            border: 1px solid gray;
        }
        
        .scroller {
            margin-top: 100px;
            height: 200px;
            width: 300px;
            border: 1px solid black;
            padding: 5px;
            overflow: scroll;
        }
        .content {
            width: 500%;
            height: 100%;
            background-image: repeating-linear-gradient(to right, white, silver 200px);
        }
    </style>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        var jsTestIsAsync = true;

        var scroller;
        var overflowScrollEventCount = 0;
        var windowScrollEventCount = 0;

        async function resetScrollPositions()
        {
            window.scrollTo(0, 100);
            scroller.scrollLeft = 100;
            
            // Wait for scroll events to fire.
            await UIHelper.renderingUpdate();
        }
        
        async function doMouseWheelScroll()
        {
            await UIHelper.startMonitoringWheelEvents();
            eventSender.mouseMoveTo(100, 100);
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "began", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(1, -5, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(2, -5, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(1, -5, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");

            // FIXME: Use await UIHelper.waitForScrollCompletion();
            return new Promise(resolve => {
                eventSender.callAfterScrollingCompletes(() => {
                    requestAnimationFrame(resolve);
                });
            });
        }
        
        async function scrollTest()
        {
            debug('');
            debug('Test that events with a small X delta do not cause trapping in the horizontal overflow');
            await doMouseWheelScroll();

            shouldBe('overflowScrollEventCount == 0', 'true');
            shouldBe('windowScrollEventCount > 0', 'true');
            
            finishJSTest();
        }

        window.addEventListener('load', async () => {
            document.body.addEventListener('wheel', () => { }, false);

            scroller = document.querySelector('.scroller');
            await resetScrollPositions();

            scroller.addEventListener('scroll', () => {
                ++overflowScrollEventCount;
            }, false);

            window.addEventListener('scroll', () => {
                ++windowScrollEventCount;
            }, false);

            setTimeout(scrollTest, 0);
        }, false);
    </script>
</head>
<body>
    <div class="container">
        <div class="scroller">
            <div class="content"></div>
        </div>
    </div>
    <div id="console"></div>
    <script src="../../../resources/js-test-post.js"></script>
</body>
</html>
