<!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.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
      }

      resultEntries = [];

      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)) {
                  resultEntries.push("FAIL(element '"+id+"' matrix["+i+"]' was:"+actual+", expected:"+expect+")<br>");
                  pass = false;
              }
          }
          
          if (pass)
            resultEntries.push("PASS(element '"+id+"' matches expected value)<br>");
          
          numSnapshots++;
          if (numSnapshots == 2) {
              resultEntries.sort();
              document.getElementById('result').innerHTML = resultEntries.join("");
              if (window.testRunner)
                  testRunner.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>
