<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<style>
.start {
    animation: anim 1ms;
}

@keyframes anim {
    0% {
        transform: translate3d(0, 0, 1px);
    }
    100% {
        transform: translate3d(0, 0, 0);
    }
}
</style>
<body>x
<script>
'use strict';
async_test(function(t) {

  requestAnimationFrame(function() {
    document.body.classList.add('start');

    // Force a style resolve, to ensure the animation is created.
    document.body.offsetTop;

    var animation = document.body.getAnimations()[0];
    requestAnimationFrame(function() {
      if (animation.playState === 'pending') {
        var passed = false;
        document.body.addEventListener('animationstart', function() {
          passed = true;
        });
        document.body.addEventListener('animationend', function() {
          t.step(function() {
            assert_true(passed);
            t.done();
          });
        });
      } else {
        // The animation is no longer pending.

        // We missed the opportunity to add a start event listener
        // before the animation started. This test might flakily
        // pass even if the implementation is incorrect.
        t.done();
      }
    });
  });
});
</script>
