<html>
<head>
    <style>
        ::-webkit-scrollbar {
            width: 0px;
            height: 0px;
        }
    </style>
    <script>
      window.enablePixelTesting = true;

      function scroll() {
          // Fully scroll to bring the fixed pos rect into view.
          window.scrollTo(100, 1400);
          if (window.internals)
            internals.setVisualViewportOffset(400, 300);
      }

      function scaleWithEventSender() {
          var scaleFactor = 2.0;
          if (window.internals)
             internals.setPageScaleFactor(scaleFactor);
      }

      function test() {
          if (window.internals)
            internals.settings.setScrollAnimatorEnabled(false);

          document.body.style.width = (document.body.clientWidth + 100) + "px";
          scaleWithEventSender();
          scroll();
      }
    </script>
    <script src="../../fast/../resources/js-test.js"></script>
</head>
<body style="height: 2000px; width: 2000px; margin:0px;" onload="test();">
    <div style="position: fixed; bottom: 100px; right: 100px; z-index: 1">
        <div style="left:0; top:0; width:100px; height:100px; position:absolute; background:black;"></div>
        <div style="left:100px; top:0; width:100px; height:100px; position:absolute; background:green;"></div>

        <div style="left:0px; top:100px; width:100px; height:100px; position:absolute; background:yellow;"></div>
        <div style="left:100px; top:100px; width:100px; height:100px; position:absolute; background:blue;"></div>
    </div>
</body>
</html>
