<html>
<head>
    <style>
        ::-webkit-scrollbar {
            width: 0px;
            height: 0px;
        }
    </style>
    <script>
      window.enablePixelTesting = true;
      if (window.internals)
          window.internals.settings.setFixedElementsLayoutRelativeToFrame(true);

      function scroll() {
          window.scrollTo(100,100);
      }

      function scaleWithEventSender() {
          var scaleFactor = 2.0;
          var scaleOffset = 0;
          if (window.eventSender) {
             eventSender.scalePageBy(scaleFactor, scaleOffset, scaleOffset);
          }
      }

      function test() {
          scaleWithEventSender();
          scroll();
      }
    </script>
    <script src="../../resources/js-test-pre.js"></script>
</head>
<body style="width:2000px; height:2000px; margin:0px;" onload="test();">
    <div style="position: fixed; top: -100px; left: -100px; z-index: 1">
        <div style="left:0; top:0; width:100px; height:100px; position:absolute; background:yellow;"></div>
        <div style="left:100px; top:0; width:100px; height:100px; position:absolute; background:green;"></div>

        <div style="left:0; top:100px; width:100px; height:100px; position:absolute; background:green;"></div>
        <div style="left:100px; top:100px; width:100px; height:100px; position:absolute; background:black;"></div>
    </div>

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

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

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