<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <style>
        body {
            height: 2000px;
        }
        .scroller {
            position: absolute;
            top: 310px;
            left: 10px;
            height: 300px;
            width: 300px;
            border: 20px solid gray;
            padding: 5px;
            overflow: scroll;
        }
        .content {
            width: 200%;
            height: 300%;
            background-image: linear-gradient(green, orange);
            background-attachment: fixed;
        }
    </style>
    <script src="../../../resources/js-test-pre.js"></script>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        var jsTestIsAsync = true;

        var scroller;
        var overflowScrollEventCount = 0;

        async function resetScrollPositions()
        {
            window.scrollTo(0, 300);
            scroller.scrollTop = 0;
            
            // Wait for scroll events to fire.
            await UIHelper.renderingUpdate();

            overflowScrollEventCount = 0;
        }
        
        async function testScrollOverContent()
        {
            debug('');
            debug('Test that scroll over scroller with background-attachment:fixed content works.');
            await resetScrollPositions();
            await UIHelper.mouseWheelScrollAt(100, 100);

            shouldBe('overflowScrollEventCount > 0', 'true');
        }

        async function scrollTest()
        {
            await testScrollOverContent();

            finishJSTest();
        }

        window.addEventListener('load', () => {
            scroller = document.querySelector('.scroller');
            scroller.addEventListener('scroll', () => {
                ++overflowScrollEventCount;
            }, false);

            setTimeout(scrollTest, 0);
        }, false);
    </script>
</head>
<body>
    <div class="scroller">
        <div class="content"></div>
    </div>
    <div class="overlapper"></div>
    <script src="../../../resources/js-test-post.js"></script>
</body>
</html>
