<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <style>
        #scroller {
            width: 300px;
            height: 300px;
            overflow: scroll;
            border: 1px solid black;
        }
        
        .filler {
            width: 30px;
            height: 150px;
            margin: 10px;
            background-color: silver;
        }

        .fixed-background {
            position: relative;
            margin: 10px;
            height: 200px;
            background-image: linear-gradient(lightblue, palegreen);
            background-attachment: fixed;
            background-size: 1px 300px;
            border: 1px solid blue;
            box-sizing: border-box;
        }

        .fixed-child-background {
            position: relative;
            height: 200px;
            padding: 10px;
            background-size: 1px 300px;
            border: 1px solid blue;
            box-sizing: border-box;
        }

        .fixed-child-background > div {
            height: 100%;
            background-image: linear-gradient(lightblue, palegreen);
            background-attachment: fixed;
            background-size: 1px 300px;
        }

        .composited {
            transform: translateZ(0);
        }

        /* Hide the scrollbars to remove scrollbar repaints. */
        ::-webkit-scrollbar {
            display: none;
        }
    </style>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        jsTestIsAsync = true;
        description("Test that a scroll of an overflow scrolling element, with a composoited `background-attachment:fixed` child, repaints");

        function startTrackingRepaints()
        {
            window.internals.startTrackingRepaints();
            document.getElementById('scroller').scrollTop = 800;

            logRepaints();
        }

        function logRepaints()
        {
            layerTreeAsText =  window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS);
            window.internals.stopTrackingRepaints();
            shouldBeTrue("layerTreeAsText.indexOf('(rect 0.00 0.00 280.00 200.00)') > -1");
            shouldBeTrue("layerTreeAsText.indexOf('(rect 11.00 11.00 278.00 178.00)') > -1");

            finishJSTest();
        }

        window.addEventListener('load', () => {
            if (!window.testRunner || !window.internals)
                return;

            setTimeout(startTrackingRepaints, 0);
        }, false);
    </script>
</head>
<body>
    <div id="scroller">
        <div class="composited filler"></div>
        <div class="fixed-background"></div>
        <div class="fixed-child-background"><div></div></div>
        <div class="filler"></div>
    </div>

<script src="../../resources/js-test-post.js"></script>
</html>
