Index: third_party/WebKit/Source/core/dom/LayoutTreeBuilderTraversal.cpp |
diff --git a/third_party/WebKit/Source/core/dom/LayoutTreeBuilderTraversal.cpp b/third_party/WebKit/Source/core/dom/LayoutTreeBuilderTraversal.cpp |
index df6ce336cd67a569ae6ee9b3a8fafd813493c799..a0bd8d53ea64cbb81d0bb883d151810c01d69719 100644 |
--- a/third_party/WebKit/Source/core/dom/LayoutTreeBuilderTraversal.cpp |
+++ b/third_party/WebKit/Source/core/dom/LayoutTreeBuilderTraversal.cpp |
@@ -35,11 +35,21 @@ namespace blink { |
namespace LayoutTreeBuilderTraversal { |
+inline static bool hasDisplayContentsStyle(const Node& node) { |
+ return node.isElementNode() && toElement(node).displayContentsStyle(); |
+} |
+ |
static bool isLayoutObjectReparented(const LayoutObject* layoutObject) { |
if (!layoutObject->node()->isElementNode()) |
return false; |
+ |
if (toElement(layoutObject->node())->isInTopLayer()) |
return true; |
+ |
+ if (layoutObject->node()->parentNode() && |
+ hasDisplayContentsStyle(*layoutObject->node()->parentNode())) |
+ return true; |
+ |
return false; |
} |
@@ -68,6 +78,16 @@ ContainerNode* parent(const Node& node, ParentDetails* details) { |
return FlatTreeTraversal::parent(node, details); |
} |
+LayoutObject* parentLayoutObject(const Node& node) { |
+ ContainerNode* parent = LayoutTreeBuilderTraversal::parent(node); |
+ |
+ while (parent && hasDisplayContentsStyle(*parent)) { |
+ parent = LayoutTreeBuilderTraversal::parent(*parent); |
+ } |
+ |
+ return parent ? parent->layoutObject() : nullptr; |
+} |
+ |
Node* nextSibling(const Node& node) { |
if (node.isBeforePseudoElement()) { |
assertPseudoElementParent(toPseudoElement(node)); |