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..45cd8ea622ac4127f4892793419113a70e659a7e 100644 |
| --- a/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
| +++ b/third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp |
| @@ -49,13 +49,14 @@ LayoutTreeBuilderForElement::LayoutTreeBuilderForElement(Element& element, |
| ComputedStyle* style) |
| : LayoutTreeBuilder(element, nullptr), m_style(style) { |
| DCHECK(!element.isSlotOrActiveInsertionPoint()); |
| + // FIXME: Move the first-letter logic inside parentLayoutObject too? |
|
jfernandez
2016/10/27 17:08:02
We use to define this kind of comments with TODO (
|
| 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 +105,19 @@ bool LayoutTreeBuilderForElement::shouldCreateLayoutObject() const { |
| LayoutObject* parentLayoutObject = this->parentLayoutObject(); |
| if (!parentLayoutObject) |
| return false; |
| + |
|
jfernandez
2016/10/27 17:08:01
Remove this empty line.
|
| if (!parentLayoutObject->canHaveChildren()) |
| return false; |
| - return m_node->layoutObjectIsNeeded(style()); |
| + // Make sure we keep track of "display: contents" styles. |
| + ComputedStyle& style = this->style(); |
|
jfernandez
2016/10/27 17:08:01
I think we need to manage this as reference counte
|
| + if (!m_node->layoutObjectIsNeeded(style)) { |
| + if (style.display() == EDisplay::Contents) |
| + m_node->storeDisplayContentsStyle(style); |
|
jfernandez
2016/10/27 17:08:01
We need to take care of references here.
|
| + return false; |
| + } |
| + |
| + return true; |
| } |
| ComputedStyle& LayoutTreeBuilderForElement::style() const { |
| @@ -156,7 +166,11 @@ void LayoutTreeBuilderForElement::createLayoutObject() { |
| } |
| void LayoutTreeBuilderForText::createLayoutObject() { |
| - ComputedStyle& style = m_layoutObjectParent->mutableStyleRef(); |
| + ComputedStyle& style = *m_style; |
|
jfernandez
2016/10/27 17:08:01
The removed code was like that becase we wanted a
|
| + |
| + DCHECK(m_style == m_layoutObjectParent->style() || |
| + toElement(LayoutTreeBuilderTraversal::parent(*m_node)) |
| + ->displayContentsStyle()); |
| DCHECK(m_node->textLayoutObjectIsNeeded(style, *m_layoutObjectParent)); |