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 e0d9f0b90543fa91ffc6413bf7479015ec59d4ea..082772bd689a629707f37ba803f9c39d253e2166 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.isSlotOrActiveInsertionPoint()); |
+ // 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); |
} |
} |
@@ -104,10 +106,19 @@ bool LayoutTreeBuilderForElement::shouldCreateLayoutObject() const { |
LayoutObject* parentLayoutObject = this->parentLayoutObject(); |
if (!parentLayoutObject) |
return false; |
+ |
if (!parentLayoutObject->canHaveChildren()) |
return false; |
- return m_node->layoutObjectIsNeeded(style()); |
+ // Make sure we keep track of "display: contents" styles. |
+ ComputedStyle& style = this->style(); |
+ if (!m_node->layoutObjectIsNeeded(style)) { |
+ if (style.display() == EDisplay::Contents) |
+ m_node->storeDisplayContentsStyle(style); |
rune
2016/11/01 07:12:23
It's a surprise that shouldCreateLayoutObject has
emilio
2016/11/01 15:46:31
Agreed, moved it out of there. Still, createLayout
|
+ return false; |
+ } |
+ |
+ return true; |
} |
ComputedStyle& LayoutTreeBuilderForElement::style() const { |
@@ -156,7 +167,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)) |
+ ->displayContentsStyle()); |
DCHECK(m_node->textLayoutObjectIsNeeded(style, *m_layoutObjectParent)); |