<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
<html>
<head>
    <title>Absolutes in relative in overflow move with it but are not stacking descendants: need 3 'move' nodes</title>
    <style>
        .scrollcontent {
            height: 500px;
        }
        .scroller {
            margin: 20px;
            overflow: scroll;
            height: 300px;
            width: 300px;
            border: 2px solid black;
        }
    
        .relative {
            position: relative;
            border: 3px solid orange;
            height: 20px;
        }

        .absolute {
            position:absolute;
            left: 50px;
            top: 50px;
            width: 100px;
            height: 100px;
            background: gray;
            border: 2px solid green;
        }
    
        .inner {
            left:25px;
            top:25px;
            width: 200px;
        }

        .scrollcontent {
            height: 500px;
            background-image: repeating-linear-gradient(white, silver 200px);
        }
    </style>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        window.addEventListener('load', () => {
            if (window.internals)
                document.getElementById('tree').innerText = internals.scrollingStateTreeAsText();
        }, false);
    </script>
</head>
<body>

    <div class="scroller">
        <div class="relative">
            <div class="absolute">abs
                <div class="inner absolute">abs</div>
            </div>
        </div>
        <div class="scrollcontent"></div>
    </div>
<pre id="tree"></pre>
</body>
</html>
