<!DOCTYPE html>
<html>
<head>
    <style>
        body {
            height: 1000px;
        }
    </style>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        jsTestIsAsync = true;

        var iframeTarget;

        async function scrollTest()
        {
            window.scrollTo(0, 200);

            iframeTarget = document.getElementById('target');
            shouldBe('iframeTarget.contentWindow.pageYOffset', '0');
            shouldBe('window.pageYOffset', '200');

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

            eventSender.mouseMoveTo(50, 250); // Inside the iframe.
            eventSender.monitorWheelEvents();
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'none', 'begin');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'none', 'continue');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'none', 'continue');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -10, 'none', 'continue');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
            await UIHelper.waitForScrollCompletion();

            debug('After scroll');
            shouldBe('iframeTarget.contentWindow.pageYOffset', '500');
            shouldBe('window.pageYOffset', '200');

            await UIHelper.animationFrame();

            debug('After wait');
            shouldBe('iframeTarget.contentWindow.pageYOffset', '500');
            shouldBe('window.pageYOffset', '200');

            eventSender.monitorWheelEvents();
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 1, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 1, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');

            await UIHelper.waitForScrollCompletion();
            shouldBe('iframeTarget.contentWindow.pageYOffset', '480');
            shouldBe('window.pageYOffset', '200');

            finishJSTest();
        }

        function setupTopLevel() 
        {
            description("Tests that a second scroll with small x/y deltas uses latching from an earlier scroll.");
            setTimeout(scrollTest, 0);
        }
        
    </script>

</head>
<body>
<div id="parent" style="height: 2000px">
    <iframe id="target" name="target" style="border:solid 1px green; height: 500px; width: 500px;" 
     srcdoc= "
        <style>
            body {
                height: 1000px;
                margin: 0;
                background-image: repeating-linear-gradient(silver, white 200px);
            }
        </style>
        <body></body>
     "
     onload="setupTopLevel();">
    </iframe>
</div>
<div id="console"></div>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
