<style>
    body {
        overflow: hidden;
    }
    .composited {
        -webkit-transform: translateZ(0);
    }

    .box {
        width: 100px;
        height: 100px;
        background-color: blue;
    }

    img {
        background-color: black;
        width: 100px;
        height: 100px;
        border: none !important;
    }

    div.inline {
        width: 100px;
        height: 100px;
        background-color: red;
    }
    img.to-visible {
        visibility: hidden;
    }
    body.changed img.to-visible {
        visibility: visible;
    }

    img.to-hidden {
        visibility: visible;
    }
    body.changed img.to-hidden {
        visibility: hidden;
    }

    #layers {
        opacity: 0; /* hide from pixel result */
    }

    .box {
        width: 100px;
        height: 100px;
        background-color: green;
    }

    .indicator {
        position: absolute;
        left: 0;
        z-index: 1;
    }
</style>
<script>
    if (window.testRunner) {
        testRunner.dumpAsText(true);
        testRunner.waitUntilDone();
    }

    function doTest()
    {
        window.setTimeout(function() {
            document.body.classList.add('changed');
            if (window.testRunner) {
                document.getElementById('layers').innerText = window.internals.layerTreeAsText(document);
                testRunner.notifyDone();
            }
        }, 0);
    }
    window.addEventListener('load', doTest, false);
</script>
<body>
    <!-- You should see no red. -->
    <div class="indicator box" style="top: 0px"></div>
    <div class="indicator box" style="top: 250px"></div>

    <div style="position: absolute; left: 0px; top: 0px; z-index: 0; " class="composited">
        <div class="inline"></div>
        <img style="position: absolute; left: 50px; top: 50px; z-index: -1;">
        <img style="position: absolute; left: 400px; top: 150px; z-index: 0;" class="to-visible">
    </div>

    <div style="position: absolute; left: 0px; top: 250px; z-index: 0; " class="composited">
        <div class="inline"></div>
        <img style="position: absolute; left: 50px; top: 50px; z-index: -1;">
        <img style="position: absolute; left: 400px; top: 150px; z-index: 0;" class="to-hidden">
    </div>

<pre id="layers">Layer tree goes here in DRT</pre>
</body>