<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<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>
