<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
<style>
    body {
        height: 2500px;
    }
    
    .scroller {
        border: 1px solid black;
    }

    .outer.scroller {
        width: 500px;
        height: 300px;
        overflow: auto;
    }

    .inner.scroller {
        width: 400px;
        height: 250px;
        overflow-x: hidden;
        overflow-y: auto;
        margin: 10px;
    }

    .contents {
        height: 300%;
        width: 300%;
    }
    
    .wide {
        width: 300%;
        height: 10px;
        background-color: gray;
    }
    
    </style>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../../../resources/ui-helper.js"></script>
<script>
    jsTestIsAsync = true;

    let innerScroller;
    let outerScroller;

    function checkForScroll()
    {
        innerScroller = document.querySelector('.inner.scroller');
        outerScroller = document.querySelector('.outer.scroller');

        shouldBe('innerScroller.scrollLeft', '0');
        shouldBe('innerScroller.scrollTop', '0');

        shouldBeTrue('outerScroller.scrollLeft > 0');
        shouldBe('outerScroller.scrollTop', '0');

        finishJSTest();
    }

    async function scrollTest()
    {
        eventSender.mouseMoveTo(100, 100);

        // Sideways scroll.
        eventSender.monitorWheelEvents();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'began', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(-10, 0, 'changed', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(-10, 0, 'none', 'begin');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(-10, 0, 'none', 'continue');
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
        await UIHelper.waitForScrollCompletion();

        checkForScroll();
    }

    function setupTopLevel()
    {
        description("Tests that sieways scrolling in an overflow-x:hidden scroller scrolls the enclosing scroller");
        if (window.eventSender) {
            setTimeout(scrollTest, 0);
            return;
        }

        finishJSTest();
    }

    window.addEventListener('load', () => {
        setupTopLevel();
    }, false);
</script>
</head>
<body>
    <div class="outer scroller">
        <div class="inner scroller">
            <div class="contents"></div>
        </div>
        <div class="wide"></div>
    </div>
<div id="console"></div>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
