<!DOCTYPE html>

<html>
<head>
    <style>
        body {
            background-color: white;
        }
        
        body.transparent {
            background-color: rgba(0, 0, 0, 0.2);
        }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function documentLoaded()
        {
            window.setTimeout(doTest, 0);
        }
        
        function appendLayerDump()
        {
            if (window.internals)
                document.getElementById('output').textContent += window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_TILE_CACHES);
        }

        function doTest()
        {
            if (window.internals)
                internals.setViewBaseBackgroundColor('transparent');
            appendLayerDump();

            document.body.classList.add('transparent');
            appendLayerDump();

            document.body.classList.remove('transparent');
            appendLayerDump();

            if (window.internals)
                internals.setViewBaseBackgroundColor('white');

            document.body.classList.add('transparent');
            appendLayerDump();

            if (window.testRunner)
                testRunner.notifyDone();
        }

        window.addEventListener('load', documentLoaded, false);
    </script>
</head>
<body>

<p>Page tiles should be transparent if the body's background has alpha.</p>
<div id="test"></div>
<pre id="output"></pre>

</body>
</html>
