<!DOCTYPE html>
<html>
<head>
  <title>Tests that prefixed animation events are correctly fired.</title>
  <style>
    #box {
      position: relative;
      left: 100px;
      top: 10px;
      height: 100px;
      width: 100px;
      animation-duration: 0.3s;
      animation-name: anim;
      background-color: #999;
      animation-iteration-count: 3;
    }
    @keyframes anim {
        from { left: 200px; }
        to   { left: 300px; }
    }
  </style>
  <script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    function fail() {
      document.getElementById('result').innerHTML = 'FAIL: Got ' + iterationEventReceived + ' webkitAnimationCount events.';
    }

    var iterationEventReceived = 0;
    var startEventReceived = false;
    document.addEventListener('webkitAnimationStart', function() {
      startEventReceived = true;
    }, false);

    document.addEventListener('webkitAnimationIteration', function() {
      ++iterationEventReceived;
    }, false);

    document.addEventListener('webkitAnimationEnd', function() {
        if (iterationEventReceived <= 2 && startEventReceived)
            document.getElementById('result').innerHTML = 'PASS: All events have been received as expected.';
        else
            fail();
        if (window.testRunner)
            testRunner.notifyDone();
    }, false);

    onload = function()
    {
      // Animation begins once we append the DOM node to the document.
      var boxNode = document.createElement('div');
      boxNode.id = 'box';
      document.body.appendChild(boxNode);
    }
  </script>
</head>
<body>
Tests that prefixed animation events are correctly fired.
<pre id="result">FAIL: No animation events received</pre>
</body>
</html>
