Chromium Code Reviews| 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)); |