<!DOCTYPE html>
<html>
<head>
  <title>Tests that unprefixed 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.
      requestAnimationFrame(function () {
        document.getElementById('box').style.animationIterationCount = "infinite";
        document.getElementById('box').className = 'animate';
      });
    }
  </script>
</head>
<body>
Tests that unprefixed animation events are correctly fired when using html event listeners.
<pre id="result">FAIL: No animation events received</pre>
<div id="box" onanimationstart="recordAnimationStart();" onanimationend="recordAnimationEnd();" onanimationiteration="recordAnimationIteration();" class="animate"></div>
</body>
</html>
