Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: third_party/WebKit/Source/core/dom/LayoutTreeBuilder.cpp

Issue 2450093005: Support display: contents for elements, first-line and first-letter pseudos. (Closed)
Patch Set: Support display: contents for elements, first-line and first-letter pseudos. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698