<!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 that a click event is consumed by an element inside the frame.
          var p = document.getElementById("clickElementInsideFrame").getBoundingClientRect();
          await tapAtPoint(p.left + 7 + 10, p.top + 7 + 10);
          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="clickElementInsideFrame" style="left: 0px; top: 0px; -webkit-tap-highlight-color: transparent;" scrolling="yes" onclick="this.style.background='red'" srcdoc="
          <body style='margin: 0; width: 200px; height: 200px; background: green;'>
              <div style='position: absolute; left: 10px; top: 10px; width: 50px; height: 50px; background: red; -webkit-tap-highlight-color: transparent;'
                   onclick='this.style.background=&quot;green&quot;'></div>
          </body>" onload="runTest()">
      </iframe>
    </div>
</body>
</html>
