<!DOCTYPE html>
<html>
<head>
    <link rel="help" href="http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent">
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        jsTestIsAsync = true;
        var iframeTarget;
        var pageScrollPositionBefore;
        var iframeScrollPositionBefore;

        function checkForScroll()
        {
            // The iframe should have scrolled, but not the main page.
            var pageScrollPositionAfter = document.scrollingElement.scrollTop;
            var iframeScrollPositionAfter = window.frames['target'].document.scrollingElement.scrollTop;

            if (iframeScrollPositionBefore != iframeScrollPositionAfter)
                testPassed("iframe received wheel events.");
            else
                testFailed("iframe did not receive wheel events.");

            finishJSTest();
        }

        async function scrollTest()
        {
            pageScrollPositionBefore = document.scrollingElement.scrollTop;

            iframeTarget = document.getElementById('target');

            var iframeScrollingElement = window.frames['target'].document.scrollingElement;
            iframeScrollingElement.scrollTop = iframeScrollingElement.scrollHeight - iframeTarget.clientHeight - 100;

            iframeScrollPositionBefore = iframeScrollingElement.scrollTop;

            // Scroll the #source until we reach the #target.
            var startPosX = iframeTarget.offsetLeft + 20;
            debug("iframe display height = " + iframeTarget.clientHeight);
            var startPosY = iframeTarget.offsetTop + iframeTarget.clientHeight - 42; // One wheel turn before end.

            await UIHelper.startMonitoringWheelEvents();
            eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iframe
            debug("Mouse moved to (" + startPosX + ", " + startPosY + ")");
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
            await UIHelper.waitForScrollCompletion();
            checkForScroll();
        }

        function setupTopLevel()
        {
            description("Tests that iframe doesn't pass wheel events to main frame when scrolling at bottom");
            if (window.eventSender) {
                setTimeout(scrollTest, 0);
                return;
            }
            var messageLocation = document.getElementById('parent');
            var message = document.createElement('div');
            message.innerHTML = "<p>This test is better run under DumpRenderTree. To manually test it, place the mouse pointer "
                + "inside the iframe, then use the mouse wheel or a two-finger swipe to scroll the iframe to the bottom (and beyond).</p>"
                + "<p>The test passes if you scroll far enough to see the row of END labels but the main page does not scroll.</p>";
            messageLocation.appendChild(message);
            finishJSTest();
        }
    </script>
</head>
<body id="parent" style="height: 2000px">

    <iframe id="target" name="target" style="border:solid 1px green; height: 150px; width: 300px;" 
        src= "data:text/html,
            <html style='height: 100%'>
                <body style='height: 100%'>
                    <div style='height: 100px; width: 200px'>
                        <div style='overflow-y: auto; overflow-x: hidden;'>
                        TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP TOP<br/><br/>
                        This should still be visible inside the frame after you scroll down
                        <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
                        <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
                        <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
                        This should NOT be visible inside the frame after you scroll down<br/>
                        <br/>
                        END END END END END END END END END END END END END
                        </div>
                    </div>
                </body>
            </html>"
        onload="setupTopLevel();">
    </iframe>
    <div id="console"></div>
    <script src="../../../resources/js-test-post.js"></script>
</body>
</html>
