[block-in-inline] Fix hit-testing floats in block-in-inline

The hit-testing logic was skipping all non-inline boxes in an
inline formatting context assuming they are all painted
atomically. Block-in-inline is a case where it is not painted
atomically.

This patch checks |HasFloatingDescendantsForPaint()| when
|!IsPaintedAtomically()|.

Bug: 1299181
Change-Id: Id4636a87f52bf3dcd1c817e9b1d15352333a0e68
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3474748
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#973448}
diff --git a/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html b/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html
new file mode 100644
index 0000000..6ede29d
--- /dev/null
+++ b/css/CSS2/normal-flow/block-in-inline-hittest-float-001.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level">
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-elementfrompoint">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+.float {
+  float: left;
+  width: 200px;
+  height: 200px;
+  background: orange;
+}
+</style>
+<body>
+  <a id="a" href="#">
+    <div>
+      <div id="target" class="float"></div>
+    </div>
+  </a>
+<script>
+test(() => {
+  const target_bounds = target.getBoundingClientRect();
+  const target_x = target_bounds.x + (target_bounds.width / 2);
+  const target_y = target_bounds.y + (target_bounds.height / 2);
+  const result = document.elementFromPoint(target_x, target_y);
+  assert_equals(result, target);
+});
+</script>
+</body>