<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<html>
<head>
    <style>
        .box {
            position: relative;
            height: 100px;
            width: 100px;
            margin: 50px;
            background-color: blue;
            box-shadow: 0 0 10px black;
        }
        
        .animating {
            -webkit-animation: spin 1 0.1s forwards;
        }

        @-webkit-keyframes spin {
            from { -webkit-transform: rotate(0); }
            to   { -webkit-transform: rotate(3deg); }
        }
    </style>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }
            
        function doTest()
        {
            document.getElementById('box').addEventListener('webkitAnimationEnd', function() {
                if (window.testRunner) {
                    document.getElementById('results').innerText = window.internals.layerTreeAsText(document);
                    testRunner.notifyDone();
                }
            })
        }
        window.addEventListener('load', doTest, false);
    </script>
</head>
<body>
<div id="box" class="animating box"></div>

<pre id="results">Layer tree dump goes here</pre>
</body>
</html>
