<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <style>
    #container {
      position: relative;
      width: 400px;
      height: 100px;
      border: 1px solid  black;
    }
    
    .box {
      position: absolute;
      width: 100px;
      height: 100px;
      background-color: green;
    }
    
    .indicator {
      left: 0;
      top: 0;
      background-color: red;
    }

    #container.moved .hardware {
      animation: move 300ms linear;
    }

    .hardware {
      transform: translate3d(0, 0, 0);
    }

    @keyframes move {
      from { transform: translate3d(0, 0, 0); }
      to   { transform: translate3d(300px, 0, 0); }
    }
   </style>
   <script type="text/javascript" charset="utf-8">
    'use strict';
    function testEnded()
    {
      requestAnimationFrame(function() {
        requestAnimationFrame(function() {
          if (window.testRunner)
            testRunner.notifyDone();
        });
      });
    }

    function startTest()
    {
      if (window.testRunner)
        testRunner.waitUntilDone();

      document.getElementById('tester').addEventListener('animationend', testEnded, false);
      document.getElementById('container').className = 'moved';
    }

    window.addEventListener('load', startTest, false);
   </script>
</head>
<body>

  <!-- At the end of the test the green box should obscure the red box. -->
  <div id="container">
    <div class="indicator box"></div>
    <div id="tester" class="hardware box"></div>
  </div>

</body>
</html>
