Index: third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
diff --git a/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp b/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
index 8bc3bdc8608255a72cc05e0d33e17b4f0937dd6c..d6df798b0f74e0a0ac49c3206c4ce4bbbb770dde 100644 |
--- a/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
+++ b/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
@@ -49,13 +49,15 @@ LayoutTreeBuilderForElement::LayoutTreeBuilderForElement(Element& element, |
ComputedStyle* style) |
: LayoutTreeBuilder(element, nullptr), m_style(style) { |
DCHECK(!element.isActiveSlotOrActiveInsertionPoint()); |
+ // TODO(ecobos): Move the first-letter logic inside parentLayoutObject too? |
+ // It's an extra (unnecessary) check for text nodes, though. |
if (element.isFirstLetterPseudoElement()) { |
if (LayoutObject* nextLayoutObject = |
FirstLetterPseudoElement::firstLetterTextLayoutObject(element)) |
m_layoutObjectParent = nextLayoutObject->parent(); |
- } else if (ContainerNode* containerNode = |
- LayoutTreeBuilderTraversal::parent(element)) { |
- m_layoutObjectParent = containerNode->layoutObject(); |
+ } else { |
+ m_layoutObjectParent = |
+ LayoutTreeBuilderTraversal::parentLayoutObject(element); |
} |
} |
@@ -94,7 +96,6 @@ bool LayoutTreeBuilderForElement::shouldCreateLayoutObject() const { |
return false; |
if (!parentLayoutObject->canHaveChildren()) |
return false; |
- |
return m_node->layoutObjectIsNeeded(style()); |
} |
@@ -144,7 +145,11 @@ void LayoutTreeBuilderForElement::createLayoutObject() { |
} |
void LayoutTreeBuilderForText::createLayoutObject() { |
- ComputedStyle& style = m_layoutObjectParent->mutableStyleRef(); |
+ ComputedStyle& style = *m_style; |
+ |
+ DCHECK(m_style == m_layoutObjectParent->style() || |
+ toElement(LayoutTreeBuilderTraversal::parent(*m_node)) |
+ ->hasDisplayContentsStyle()); |
DCHECK(m_node->textLayoutObjectIsNeeded(style, *m_layoutObjectParent)); |