<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<head>
  <title>Tests that prefixed animation events are correctly fired when using html event listeners.</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;

    function recordAnimationStart() {
      startEventReceived = true;
    }

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

    function recordAnimationEnd() {
      endEventReceived = true;
      document.getElementById('box').className = '';
      // Launch again the animation to catch the animation iteration events this time.
      setTimeout(function () {
        document.getElementById('box').style.animationIterationCount = "infinite";
        document.getElementById('box').className = 'animate';
      }, 200);
    }
  </script>
</head>
<body>
Tests that prefixed animation events are correctly fired when using html event listeners.
<pre id="result">FAIL: No animation events received</pre>
<div id="box" onwebkitanimationstart="recordAnimationStart();" onwebkitanimationend="recordAnimationEnd();" onwebkitanimationiteration="recordAnimationIteration();" class="animate"></div>
</body>
</html>
