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

<html>
<head>
    <title>Tests that a fill-forwards animation causes stacking context when finished.</title>
    <style>
        .box {
            position: absolute;
            top: 0;
            left: 0;
            height: 100px;
            width: 100px;
        }

        #animating {
            animation: move 0.1s 1 forwards;
            background-color: orange;
        }

        @keyframes move {
            from { transform: translateX(400px); }
            to   { transform: none }
        }

        .behind {
            background-color: blue;
            top: 50px;
            left: 50px;
            z-index: 1;
        }

        .front {
            top: 25px;
            left: 25px;
            background-color: green;
            z-index: 2;
        }
    </style>
    <script>
        if (window.testRunner)
            testRunner.waitUntilDone();
        
        window.addEventListener('load', function() {
            document.getElementById('animating').addEventListener('animationend', function() {
                // Wait until filling forwards.
                window.setTimeout(function() {
                    if (window.testRunner)
                        testRunner.notifyDone();
                }, 0);
            })
        }, false);
    </script>
</head>
<body>

<div class="behind box"></div>
<div id="animating" class="box">
    <div class="front box"></div>
</div>

</body>
</html>
