<!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;
      background-color: #999;
    }

    .animate {
      animation-duration: 0.3s;
      animation-name: anim;
    }

    @keyframes anim {
        from { left: 200px; }
        to   { left: 300px; }
    }
  </style>
  <script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    var startEventReceived = false;
    var endEventReceived = false;

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

    document.addEventListener('webkitAnimationIteration', function() {
      if (startEventReceived && endEventReceived) {
        document.getElementById('result').innerHTML = 'PASS: All events have been received as expected.';
        if (window.testRunner)
            testRunner.notifyDone();
      }
    }, false);

    document.addEventListener('webkitAnimationEnd', function() {
      endEventReceived = true;
      document.getElementById('box').className = '';
      // Launch again the animation to catch the animation iteration events this time.
      setTimeout(function () {
        document.getElementById('box').style.webkitAnimationIterationCount = "infinite";
        document.getElementById('box').className = 'animate';
      }, 200);
    }, false);

    onload = function()
    {
      // Animation begins once we append the DOM node to the document.
      var boxNode = document.createElement('div');
      boxNode.id = 'box';
      boxNode.className = 'animate';
      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>
