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

Unified Diff: Source/core/dom/RenderTreeBuilder.cpp

Issue 778003003: List marker pseudo elements. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years 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: Source/core/dom/RenderTreeBuilder.cpp
diff --git a/Source/core/dom/RenderTreeBuilder.cpp b/Source/core/dom/RenderTreeBuilder.cpp
index 3db451dfcef58fad505cf3df9b58e76feac2a19d..aaa470ac1afa2b0e73af2ca30530c47e0a1d82c5 100644
--- a/Source/core/dom/RenderTreeBuilder.cpp
+++ b/Source/core/dom/RenderTreeBuilder.cpp
@@ -30,6 +30,7 @@
#include "core/SVGNames.h"
#include "core/css/resolver/StyleResolver.h"
#include "core/dom/FirstLetterPseudoElement.h"
+#include "core/dom/MarkerPseudoElement.h"
#include "core/dom/Fullscreen.h"
#include "core/dom/Node.h"
#include "core/dom/PseudoElement.h"
@@ -55,7 +56,7 @@ RenderTreeBuilderForElement::RenderTreeBuilderForElement(Element& element, Rende
}
}
-RenderObject* RenderTreeBuilderForElement::nextRenderer() const
+RenderObject* RenderTreeBuilderForElement::nextRenderer(RenderObject* parentRenderer) const
{
ASSERT(m_renderingParent);
@@ -65,6 +66,11 @@ RenderObject* RenderTreeBuilderForElement::nextRenderer() const
if (m_node->isFirstLetterPseudoElement())
return FirstLetterPseudoElement::firstLetterTextRenderer(*m_node);
+ if (m_node->isMarkerPseudoElement()) {
+ ASSERT(parentRenderer);
+ return MarkerPseudoElement::firstNonMarkerChild(parentRenderer);
+ }
+
return RenderTreeBuilder::nextRenderer();
}
@@ -72,6 +78,12 @@ RenderObject* RenderTreeBuilderForElement::parentRenderer() const
{
RenderObject* parentRenderer = RenderTreeBuilder::parentRenderer();
+ if (m_node->isMarkerPseudoElement()) {
+ ASSERT(m_renderingParent->isRenderBlockFlow());
+ if (RenderObject* markerRenderer = MarkerPseudoElement::getParentOfFirstLineBox(toRenderBlockFlow(m_renderingParent), nullptr))
+ return markerRenderer;
+ }
+
if (parentRenderer) {
// FIXME: Guarding this by parentRenderer isn't quite right as the spec for
// top layer only talks about display: none ancestors so putting a <dialog> inside an
@@ -103,6 +115,9 @@ bool RenderTreeBuilderForElement::shouldCreateRenderer() const
if (!parentRenderer->canHaveChildren())
return false;
+ if (m_node->isMarkerPseudoElement() && parentRenderer->style()->display() == LIST_ITEM)
+ return true;
+
return m_node->rendererIsNeeded(style());
}
@@ -132,7 +147,7 @@ void RenderTreeBuilderForElement::createRenderer()
// for the first time. Otherwise code using inRenderFlowThread() in the styleWillChange and styleDidChange will fail.
newRenderer->setFlowThreadState(parentRenderer->flowThreadState());
- RenderObject* nextRenderer = this->nextRenderer();
+ RenderObject* nextRenderer = this->nextRenderer(parentRenderer);
m_node->setRenderer(newRenderer);
newRenderer->setStyle(&style); // setStyle() can depend on renderer() already being set.

Powered by Google App Engine
This is Rietveld 408576698