<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <title>Tests clipped layer in overflow in clipped in overflow</title>
    <style>
        #scroller {
            height: 300px;
            width: 300px;
            margin: 20px;
            border: 13px solid black;
            box-shadow: 0 0 7px black;
            padding: 8px;
        }
        
        .scroller {
            overflow-y: scroll;
        }
        
        .inner.scroller {
            height: 210px;
            width: 210px;
            margin: 20px;
            border: 3px solid purple;
        }
        
        .clipping {
            overflow: hidden;
            border: 2px solid gray;
        }
        
        .outer.clipping {
            margin: 10px;
            width: 200px;
            height: 200px;
        }

        .box {
            margin-top: 50px;
            margin-left: 30px;
            width: 100px;
            height: 100px;
            background-color: blue;
        }
        
        .composited {
            transform: translateZ(0);
            box-shadow: 0 0 4px black;
        }

        .spacer {
            height: 200px;
            width: 20px;
            background-color: silver;
        }
    </style>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        window.addEventListener('load', () => {
            scroller.scrollTo(0, 50);
            scroller2.scrollTo(0, 150);
            if (window.internals)
                document.getElementById('layers').innerText = window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_CLIPPING);
        }, false);
    </script>
</head>
<body>
    <div id="scroller" class="scroller">
        <div class="spacer"></div>
        <div class="outer clipping">
            <div id="scroller2" class="inner scroller">
                <div class="spacer"></div>
                <div class="clipping">
                    <div class="composited box"></div>
                </div>
                <div class="spacer"></div>
            </div>
        </div>
        <div class="spacer"></div>
    </div>
<pre id="layers"></pre>
</body>
</html>

