| 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.
|
|
|
|
|