<!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: 10px;
      top: 0;
      background-color: red;
    }

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

    .hardware {
      -webkit-transform-style: preserve-3d;
      -webkit-transform: translate3d(10px, 0, 0);
    }

    @-webkit-keyframes move {
      from { -webkit-transform: translate3d(10px, 0, 0); }
      to   { -webkit-transform: translate3d(300px, 0, 0); }
    }
   </style>
   <script type="text/javascript" charset="utf-8">

    function testEnded()
    {
      if (window.testRunner)
        testRunner.notifyDone();
    }
    
    function startTest()
    {
      if (window.testRunner)
        testRunner.waitUntilDone();

      document.getElementById('tester').addEventListener('webkitAnimationEnd', testEnded, false);
      document.getElementById('container').className = 'moved';
    }
    
    window.addEventListener('load', startTest, false);
   </script>
</head>
<body>

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

  <div id="result">
  </div>

</body>
</html>
