| 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));
|
|
|