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

<html>
<head>
    <style>
        .box {
            width: 120px;
            height: 100px;
            background-color: blue;
            margin: 100px 100px;
            position: relative;
            box-shadow: 0 0 10px black;
            -webkit-transform-origin: 80% 20%;
            transition: -webkit-transform 10s;
            -webkit-transform: translateX(10px);
        }
        
        .dot {
            position: absolute;
            top: 0;
            left: 0;
            height: 4px;
            width: 4px;
            background-color: silver;
        }
        
        body.changed .box {
            animation: move 10s linear;
        }
        
        @keyframes move {
            from {
                -webkit-transform: translatex(10px);
            }
            to {
                -webkit-transform: scale(1.3) rotate(1deg);
            }
        }
    </style>
    <script src="../../../compositing/resources/compositing-test-utils.js"></script>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function runTest()
        {
            makeDots(30, 30);
            
            window.setTimeout(function() {
                document.getElementById('target').addEventListener('animationstart', dumpLayersWithoutTransforms, false);
                document.body.classList.add('changed');
            }, 0);
        }
        
        window.addEventListener('load', runTest, false);
    </script>
</head>
<body>

    <div id="target" class="box">
    </div>
<pre id="layers"></pre>
</body>
</html>
