<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<head>
  <style>
    #container {
      -webkit-transform: translateZ(0px);
      -webkit-perspective: 400;
    }

    #revealed {
      position: absolute;
      left: 100px;
      height: 100px;
      width: 100px;
      background-color: green;
    }

    #animated {
      position: absolute;
      left: 100px;
      height: 100px;
      width: 100px;
      background-color: red;
      -webkit-transform: translateZ(10px);
      -webkit-transform-style: preserve-3d;
      -webkit-animation-duration: 100ms;
      -webkit-animation-fill-mode: both;
      -webkit-animation-timing-function: linear;
      -webkit-animation-iteration-count: 1;
    }

    @-webkit-keyframes anim {
      from { -webkit-transform: translateZ(0px) translateX(0px); }
      to { -webkit-transform: translateZ(200px) translateX(-200px); }
    }
   </style>

   <script src="resources/animation-test-helpers.js"></script>
   <script>
     if (window.testRunner)
       testRunner.dumpAsText();

     function animationDone()
     {
       var animated = document.getElementById('animated');
       var result;
       var expected = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -200, 0, 200, 1];
       var computed = getPropertyValue("webkitTransform", "animated");
       if (comparePropertyValue("webkitTransform", computed, expected, 0.002)) {
         result = "PASS - Computed final position is correct.";
       } else {
         result = "FAIL - Computed final position is incorrect. Expected " + expected + ", got " + computed;
       }
       document.getElementById('result').innerHTML = result;
       testRunner.notifyDone();
     }

     function animationStarted()
     {
       var animated = document.getElementById('animated');
       animated.style.webkitTransformStyle = 'flat';
     }

     function startTest()
     {
       var animated = document.getElementById('animated');
       animated.style.webkitAnimationName = "anim";
       animated.addEventListener('webkitAnimationEnd', animationDone);
       waitForAnimationToStart(animated, animationStarted);
     }
   </script>
</head>
<body onload="startTest()">
  <div id="container">
    <div id="revealed"></div>
    <div id="animated"></div>
  </div>
  <div id="result"></div>
</body>
</html>
