Commit 3c7ae5e9 authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

SetInnerNode() needs to decide when to set box fragment.

There's some special logic for handling inert (that's INERT, not INNER)
nodes.

Fixes the following tests when LayoutNGFullPositionForPoint is enabled:

  external/wpt/inert/inert-inlines.tentative.html
  fast/dom/inert/inert-inlines.html

Bug: 1150362
Change-Id: I8ce278168555b1f4b53b6a5abf121637f4bd58bc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2554557
Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830934}
parent 5198bacd
...@@ -147,8 +147,8 @@ void HitTestResult::SetNodeAndPosition( ...@@ -147,8 +147,8 @@ void HitTestResult::SetNodeAndPosition(
Node* node, Node* node,
scoped_refptr<const NGPhysicalBoxFragment> box_fragment, scoped_refptr<const NGPhysicalBoxFragment> box_fragment,
const PhysicalOffset& position) { const PhysicalOffset& position) {
SetBoxFragment(std::move(box_fragment)); local_point_ = position;
SetNodeAndPosition(node, position); SetInnerNodeAndBoxFragment(node, std::move(box_fragment));
} }
void HitTestResult::OverrideNodeAndPosition(Node* node, void HitTestResult::OverrideNodeAndPosition(Node* node,
...@@ -285,10 +285,17 @@ HTMLAreaElement* HitTestResult::ImageAreaForImage() const { ...@@ -285,10 +285,17 @@ HTMLAreaElement* HitTestResult::ImageAreaForImage() const {
} }
void HitTestResult::SetInnerNode(Node* n) { void HitTestResult::SetInnerNode(Node* n) {
SetInnerNodeAndBoxFragment(n, /* box_fragment */ nullptr);
}
void HitTestResult::SetInnerNodeAndBoxFragment(
Node* n,
scoped_refptr<const NGPhysicalBoxFragment> box_fragment) {
if (!n) { if (!n) {
inner_possibly_pseudo_node_ = nullptr; inner_possibly_pseudo_node_ = nullptr;
inner_node_ = nullptr; inner_node_ = nullptr;
inner_element_ = nullptr; inner_element_ = nullptr;
DCHECK(!box_fragment);
box_fragment_ = nullptr; box_fragment_ = nullptr;
return; return;
} }
...@@ -309,7 +316,9 @@ void HitTestResult::SetInnerNode(Node* n) { ...@@ -309,7 +316,9 @@ void HitTestResult::SetInnerNode(Node* n) {
} }
} }
if (RuntimeEnabledFeatures::LayoutNGFullPositionForPointEnabled()) { if (box_fragment) {
SetBoxFragment(std::move(box_fragment));
} else if (RuntimeEnabledFeatures::LayoutNGFullPositionForPointEnabled()) {
if (const LayoutBox* layout_box = n->GetLayoutBox()) { if (const LayoutBox* layout_box = n->GetLayoutBox()) {
// Fragmentation-aware code will set the correct box fragment on its own, // Fragmentation-aware code will set the correct box fragment on its own,
// but sometimes we enter legacy layout code when hit-testing, e.g. for // but sometimes we enter legacy layout code when hit-testing, e.g. for
......
...@@ -149,6 +149,8 @@ class CORE_EXPORT HitTestResult { ...@@ -149,6 +149,8 @@ class CORE_EXPORT HitTestResult {
const HitTestRequest& GetHitTestRequest() const { return hit_test_request_; } const HitTestRequest& GetHitTestRequest() const { return hit_test_request_; }
void SetInnerNode(Node*); void SetInnerNode(Node*);
void SetInnerNodeAndBoxFragment(Node*,
scoped_refptr<const NGPhysicalBoxFragment>);
void SetInertNode(Node*); void SetInertNode(Node*);
HTMLAreaElement* ImageAreaForImage() const; HTMLAreaElement* ImageAreaForImage() const;
void SetURLElement(Element*); void SetURLElement(Element*);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment