<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
<style>
    body {
        height: 2000px;
    }

    .scroll-wrapper {
        position: fixed;
        left: 10px;
        top: 10px;
        width: 300px;
        height: 500px;
        background-color: silver;
    }

    #scroller {
        width: 100%;
        height: 100%;
        overflow-y: auto;
        overflow-x: hidden;
        scroll-snap-type: y mandatory;
        border: 1px solid black;
    }

    .inner-content {
        margin: 20px;
        width: auto;
        height: 75%;
        scroll-snap-align: center;
        background-color: green;
    }
</style>
<script src="../../../resources/ui-helper.js"></script>
<script src="../../../resources/js-test-pre.js"></script>
<script>
    jsTestIsAsync = true;

    var overflowScrollEventCount = 0;
    var windowScrollEventCount = 0;

    function checkForScrolls()
    {
        shouldBeTrue('overflowScrollEventCount > 0');
        shouldBe('windowScrollEventCount', '0');
    }

    async function sendWheelEvents()
    {
        await UIHelper.startMonitoringWheelEvents();
        eventSender.mouseMoveTo(100, 100);
        // This sequence needs to be long enough (> resetLatchedStateTimeout or 100ms) to allow latching to time out.

        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -2, 'changed', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -3, 'changed', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'begin');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -5, 'none', 'continue');
        await UIHelper.renderingUpdate();
        eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
        
        await UIHelper.waitForScrollCompletion();
    }

    async function scrollTest()
    {
        await sendWheelEvents();
        checkForScrolls();
        finishJSTest();
    }

    window.addEventListener('load', () => {
        description("Tests that scrolling in an overflow-scroll with scroll-snap doesn't fail to latch and scroll the document");
        
        document.getElementById('scroller').addEventListener('scroll', () => {
            ++overflowScrollEventCount;
        }, false);

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

        if (window.eventSender) {
            setTimeout(scrollTest, 0);
            return;
        }
        
        finishJSTest();
    }, false);
</script>
</head>
<body>
<div class="scroll-wrapper">
    <div id="scroller">
        <div class="inner-content"></div>
        <div class="inner-content"></div>
    </div>
</div>
<div id="console"></div>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
