<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <style>
        body {
            height: 2000px;
        }
        select {
            display: block;
            font-size: 11pt;
            margin: 10px;
            border: 1px solid black;
        }
    </style>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        jsTestIsAsync = true;

        let select;
        async function scrollTest()
        {
            select = document.getElementsByTagName('select')[0];

            select.scrollTop = 90;
            shouldBe('select.scrollTop', '90');
            shouldBe('window.pageYOffset', '0');

            if (!window.eventSender) {
                finishJSTest();
                return;
            }

            const selectBounds = select.getBoundingClientRect();
            const x = selectBounds.left + 10;
            const y = selectBounds.top + 10;

            await UIHelper.startMonitoringWheelEvents();
            eventSender.mouseMoveTo(x, y);

            debug('Scrolling up then down in the select');
            // Scroll to the top of the select.
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 1, "began", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 20, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");

            await UIHelper.waitForScrollCompletion();

            // Scroll up again to trigger a document bounce.
            await UIHelper.startMonitoringWheelEvents({ resetLatching: false });
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 1, "began", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 20, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");

            await UIHelper.waitForScrollCompletion();

            // Scroll down. This should scroll the select, not the document.
            await UIHelper.startMonitoringWheelEvents({ resetLatching: false });
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -2, "began", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -20, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -20, "changed", "none");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, "ended", "none");

            await UIHelper.waitForScrollCompletion();

            shouldBeTrue('select.scrollTop > 0');
            shouldBe('window.pageYOffset', '0');

            finishJSTest();
        }

        window.addEventListener('load', () => {
            description("Tests that scrolling over a &lt;select&gt; doesn't latch on the document");
            setTimeout(scrollTest, 0);
        }, false);
    </script>
</head>
<body>
    <select size="5">
        <option>January</option>
        <option>February</option>
        <option>March</option>
        <option>April</option>
        <option>May</option>
        <option>June</option>
        <option>July</option>
        <option>August</option>
        <option>September</option>
        <option>October</option>
        <option>November</option>
        <option>December</option>
    </select>
<div id="console"></div>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
