<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>-webkit-transform-origin vs. Transform Functions</title>
    <style type="text/css" media="screen">
    #a {
      top: 0px;
      left: 0px;
      position: absolute;
      -webkit-perspective: 800;
      width: 800px;
      height: 600px;
    }
    #b1 {
      top: 80px;
      left: 300px;
      width: 200px;
      height: 200px;
      position: absolute;
      background-color: #282;
      -webkit-animation-duration: 2s;
      -webkit-animation-iteration-count: infinite;
      -webkit-animation-timing-function: linear;
      -webkit-transform-origin: center center 200px;
    }
    @-webkit-keyframes b1 {
        from { -webkit-transform: rotateY(0deg); }
        5%  { -webkit-transform: rotateY(90deg); }
        20%  { -webkit-transform: rotateY(90deg); }
        50%  { -webkit-transform: rotateY(180deg); }
        75%  { -webkit-transform: rotateY(270deg); }
        to   { -webkit-transform: rotateY(360deg); }
    }
    #b2 {
      top: 320px;
      left: 300px;
      width: 200px;
      height: 200px;
      position: absolute;
      background-color: #282;
      -webkit-animation-duration: 2s;
      -webkit-animation-iteration-count: infinite;
      -webkit-animation-timing-function: linear;
    }
    @-webkit-keyframes b2 {
        from { -webkit-transform: translateZ(200px) rotateY(0deg) translateZ(-200px) }
        5%  { -webkit-transform: translateZ(200px) rotateY(90deg) translateZ(-200px) }
        20%  { -webkit-transform: translateZ(200px) rotateY(90deg) translateZ(-200px) }
        50%  { -webkit-transform: translateZ(200px) rotateY(180deg) translateZ(-200px) }
        75%  { -webkit-transform: translateZ(200px) rotateY(270deg) translateZ(-200px) }
        to   { -webkit-transform: translateZ(200px) rotateY(360deg) translateZ(-200px) }
    }
    </style>
    
    <script type="text/javascript" charset="utf-8">
      if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
      }

      result = "";

      const expected = {
          "b1" : [ 0,0,-1,0, 0,1,0,0, 1,0,0,0, 0,0,0,1 ],
          "b2" : [ 0,0,-1,0, 0,1,0,0, 1,0,0,0, -200,0,200,1 ]
      };

      const tolerance = 0.2;
      function isEqual(actual, desired)
      {
          var diff = Math.abs(actual - desired);
          return diff <= tolerance;
      }

      var numSnapshots = 0;

      function snapshot(id)
      {
          var e = document.getElementById(id);
          var t = window.getComputedStyle(e).webkitTransform;
          var a = t.split("(");
          var array = a[1].split(",");
          var pass = true;
          for (i = 0; i < 16; ++i) {
              var actual = parseFloat(array[i]);
              var expect = expected[id][i];
              if (!isEqual(actual, expect)) {
                  result += "FAIL(element '"+id+"' matrix["+i+"]' was:"+actual+", expected:"+expect+")<br>";
                  pass = false;
              }
          }
          
          if (pass)
            result += "PASS(element '"+id+"' matches expected value)<br>";
          
          numSnapshots++;
          if (numSnapshots == 2) {
              document.getElementById('result').innerHTML = result;
              if (window.layoutTestController)
                  layoutTestController.notifyDone();
          }
      }
      
      function snapshotOnTimeout(id) {
          setTimeout("snapshot('" + id + "')", 250);
      }

      function startAnimation(id)
      {
          var element = document.getElementById(id);
          element.addEventListener('webkitAnimationStart', function() {
              // delay to give hardware animations a chance to start
              window.setTimeout("snapshotOnTimeout('" + id + "')", 0);
          }, false);
          element.style.webkitAnimationName = id;
      }

      function start()
      {
          startAnimation('b1');
          startAnimation('b2');
      }

    </script>
  </head>
  <body onload="start()">
    <div id="a">
        <div id="b1"> </div>
        <div style="-webkit-transform:translateZ(-200px); -webkit-transform-style:preserve-3d;">
            <div id="b2"> </div>
        </div>
    </div>
  </body>
  <div id="result"> </div>
</html>
