<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<head>
  <title>Tests that unprefixed animation events are correctly fired when using html event listeners (only unprefixed should be 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;
    var prefixedEventReceived = 0;

    function recordPrefixedEvent() {
      prefixedEventReceived++;
    }

    function recordAnimationStart() {
      startEventReceived = true;
    }

    function recordAnimationIteration() {
      if (startEventReceived && endEventReceived && prefixedEventReceived == 0) {
        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 unprefixed animation events are correctly fired when using html event listeners (only unprefixed should be fired).
<pre id="result">FAIL: No animation events received</pre>
<div id="box" onwebkitanimationstart="recordPrefixedEvent();" onwebkitanimationend="recordPrefixedEvent();" onwebkitanimationiteration="recordPrefixedEvent();" onanimationstart="recordAnimationStart();" onanimationend="recordAnimationEnd();" onanimationiteration="recordAnimationIteration();" class="animate"></div>
</body>
</html>
