<!DOCTYPE html>
<html>
<!--
 | Test CSSOM View extensions to the Element Interface, verifying that
 | getBoundingClientRect() works properly with scrollLeft and scrollTop.
 -->
<head>
  <style>
    body {
      font-family: Roboto;
      font-size: 16px;
      background-color: #FF0000;
      margin: 0px;
    }

    .overflow-scroll {
      outline: none;
      width: 150px;
      height: 100px;
      overflow: scroll;
      position: relative;
      background-color: #000000;
    }

    .content {
      width: 50px;
      height: 50px;
      position: absolute;
    }
  </style>
  <script>
    if (window.testRunner) {
      window.testRunner.waitUntilDone();
    }

    function verifyGetBoundingClientRectAttributesAreCorrect(id, x, y, w, h) {
      var error = "";
      var element = document.getElementById(id);
      if (!element) {
        error += "\nElement " + id + " not found";
        return error;
      }

      var rect = element.getBoundingClientRect();
      if (rect["left"] != x) {
        error += "\ngetElementById('" + id + "').getBoundingClientRect()" +
                 ".left mismatch";
        error += "\n  Actual: " + rect["left"];
        error += "\nExpected: " + x;
      }
      if (rect["top"] != y) {
        error += "\ngetElementById('" + id + "').getBoundingClientRect()" +
                 ".top mismatch";
        error += "\n  Actual: " + rect["top"];
        error += "\nExpected: " + y;
      }
      if (rect["width"] != w) {
        error += "\ngetElementById('" + id + "').getBoundingClientRect()" +
                 ".width mismatch";
        error += "\n  Actual: " + rect["width"];
        error += "\nExpected: " + w;
      }
      if (rect["height"] != h) {
        error += "\ngetElementById('" + id + "').getBoundingClientRect()" +
                 ".height mismatch";
        error += "\n  Actual: " + rect["height"];
        error += "\nExpected: " + h;
      }
      return error;
    }

    window.onload = function() {
      document.getElementById("outer-scroll").scrollTop = 25;
      document.getElementById("outer-scroll").scrollLeft = 25;
      document.getElementById("inner-scroll").scrollTop = 10;
      document.getElementById("inner-scroll").scrollLeft = 50;
      var error1 = verifyGetBoundingClientRectAttributesAreCorrect(
          "target1", 0, -25, 50, 50);
      var error2 = verifyGetBoundingClientRectAttributesAreCorrect(
          "target2", 100, 75, 50, 50);
      if (error1 || error2) {
        console.log("FAIL" + error1 + error2);
      } else {
        document.body.style.backgroundColor = "rgba(0,0,0,0)";
      }
      if (window.testRunner) {
        window.testRunner.notifyDone();
      }
    }
  </script>
</head>
<body>
  <div id="outer-scroll" class="overflow-scroll">
    <div class="overflow-scroll">
      <div id="target1" class="content"
           style="background-color: #FF0000; transform: translateX(0px)"></div>
      <div class="content"
           style="background-color: #00FF00; transform: translateX(75px)"></div>
      <div class="content"
           style="background-color: #0000FF; transform: translateX(150px)"></div>
    </div>
    <div id="inner-scroll" class="overflow-scroll">
      <div class="content"
           style="background-color: #FF0000; transform: translateX(0px)"></div>
      <div class="content"
           style="background-color: #00FF00; transform: translateX(75px)"></div>
      <div id="target2" class="content"
           style="background-color: #0000FF; transform: translateX(150px)"></div>
    </div>
  </div>
</body>
</html>
