<html>
<head>
<script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    var pulsingSquareAnimationEnded = false;
    var popAnimationCounter = 0;

    function addPopAnimation() {
        var square = document.getElementById("square");
        square.className = "pop";
        popAnimationCounter++;
    }

    function removePopAnimation() {
        var square = document.getElementById("square");
        square.className = "";

        if (popAnimationCounter == 2) {
            var result = document.getElementById("result");
            if (pulsingSquareAnimationEnded)
                result.innerHTML = "FAIL - pop animation should not be finished after pulse animation"
            else
                result.innerHTML = "PASS - Test working";

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

    function pulsingSquareEnded() {
        pulsingSquareAnimationEnded = true;
    }
</script>
<style>
    body {
        margin-left: 100px;
        margin-top: 50px;
    }
    #square {
        width: 100px;
        height: 100px;
        position: absolute;
        top: 100px;
        background-color: blue;
        opacity: 0;
    }

    #pulsing-square {
        width: 100px;
        height: 100px;
        position: absolute;
        top: 100px;
        left: 350px;
        background-color: red;
        opacity: 0;
        -webkit-animation-name: pulse;
        -webkit-animation-duration: 0.4s;
        -webkit-animation-timing-function: ease-out;
        -webkit-animation-iteration-count: 3;
    }

    @-webkit-keyframes pulse {
        0% { -webkit-transform: scale(0.05); opacity: 1; }
        30% { opacity: 1; }
        60% { -webkit-transform: scale(0.8); opacity: 0; }
        100% { -webkit-transform: scale(0.8); opacity: 0; }
    }

    @-webkit-keyframes pop {
        0% { -webkit-transform: scale(0.05); opacity: 0; }
        33% { -webkit-transform: scale(1.08); opacity: 1; }
        66% { -webkit-transform: scale(0.92); opacity: 1; }
        100% { -webkit-transform: scale(1.0); opacity: 1; }
    }

    .pop {
        -webkit-animation-name: pop;
        -webkit-animation-duration: 0.1s;
        -webkit-animation-timing-function: ease-in-out;
        -webkit-animation-fill-mode: forwards;
    }
</style>
</head>

<body>
  <div id="square" onwebkitanimationend="removePopAnimation();"></div>
  <div id="pulsing-square" onwebkitanimationiteration="setTimeout(addPopAnimation(), 50);"
       onwebkitanimationend="pulsingSquareEnded()"></div>
  <div id="result"></div>
</body>
</html>

