<!DOCTYPE html>
<html>
  <head>
    <title>Hit testing of iframe</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="../../../resources/basic-gestures.js"></script>
    <script type="text/javascript">
      if (window.testRunner)
          testRunner.waitUntilDone();
      if (window.internals)
          internals.settings.setAsyncFrameScrollingEnabled(true);

      async function runTest() {
          if (!window.testRunner || !testRunner.runUIScript)
              return;

          // This verifies whether the iframe handles clicks outside its content box.
          var p = document.getElementById("clickInPaddingBoxOutOfContentBox").getBoundingClientRect();
          await tapAtPoint(p.left + 3, p.top + 3);
          testRunner.notifyDone();
      }
    </script>
    <style>
        iframe {
            position: absolute;
            height: 90px;
            width: 90px;
            overflow: none;
            margin: 0;
            border: 0;
            padding: 5px;
        }
    </style>
  </head>
  <body>
    <p>This test passes if you see a green rectangle.</p>
    <div style="position: absolute; top: 3em; width: 100px; height: 100px; background: green;">
      <iframe id="clickInPaddingBoxOutOfContentBox" style="left: 0px; top: 0px; background: red; -webkit-tap-highlight-color: transparent;" onclick="this.style.background='green'" scrolling="yes" srcdoc="
          <body style='margin: 0; width: 200px; height: 200px'>
              <div style='position: absolute; width: 100px; height: 100px; background: green; -webkit-tap-highlight-color: transparent;'
                   onclick='this.style.background=&quot;red&quot;'></div>
          </body>" onload="runTest()">
      </iframe>
    </div>
  </body>
</html>
