diff options
Diffstat (limited to 'Source/WebCore/dom/PseudoElement.cpp')
-rw-r--r-- | Source/WebCore/dom/PseudoElement.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/Source/WebCore/dom/PseudoElement.cpp b/Source/WebCore/dom/PseudoElement.cpp index 29259e2ec..4dadfbaa4 100644 --- a/Source/WebCore/dom/PseudoElement.cpp +++ b/Source/WebCore/dom/PseudoElement.cpp @@ -32,19 +32,20 @@ #include "RenderElement.h" #include "RenderImage.h" #include "RenderQuote.h" +#include "StyleResolver.h" namespace WebCore { const QualifiedName& pseudoElementTagName() { - DEFINE_STATIC_LOCAL(QualifiedName, name, (nullAtom, "<pseudo>", nullAtom)); + static NeverDestroyed<QualifiedName> name(nullAtom, "<pseudo>", nullAtom); return name; } String PseudoElement::pseudoElementNameForEvents(PseudoId pseudoId) { - DEFINE_STATIC_LOCAL(const String, after, (ASCIILiteral("::after"))); - DEFINE_STATIC_LOCAL(const String, before, (ASCIILiteral("::before"))); + static NeverDestroyed<const String> after(ASCIILiteral("::after")); + static NeverDestroyed<const String> before(ASCIILiteral("::before")); switch (pseudoId) { case AFTER: return after; @@ -67,14 +68,21 @@ PseudoElement::PseudoElement(Element& host, PseudoId pseudoId) PseudoElement::~PseudoElement() { ASSERT(!m_hostElement); -#if USE(ACCELERATED_COMPOSITING) - InspectorInstrumentation::pseudoElementDestroyed(document().page(), this); -#endif } -PassRefPtr<RenderStyle> PseudoElement::customStyleForRenderer() +void PseudoElement::clearHostElement() { - return m_hostElement->renderer()->getCachedPseudoStyle(m_pseudoId); + InspectorInstrumentation::pseudoElementDestroyed(document().page(), *this); + + m_hostElement = nullptr; +} + +std::optional<ElementStyle> PseudoElement::resolveCustomStyle(const RenderStyle& parentStyle, const RenderStyle*) +{ + auto* style = m_hostElement->renderer()->getCachedPseudoStyle(m_pseudoId, &parentStyle); + if (!style) + return std::nullopt; + return ElementStyle(RenderStyle::clonePtr(*style)); } void PseudoElement::didAttachRenderers() @@ -88,12 +96,8 @@ void PseudoElement::didAttachRenderers() for (const ContentData* content = style.contentData(); content; content = content->next()) { auto child = content->createContentRenderer(document(), style); - if (renderer->isChildAllowed(*child, style)) { - auto* childPtr = child.get(); + if (renderer->isChildAllowed(*child, style)) renderer->addChild(child.leakPtr()); - if (childPtr->isQuote()) - toRenderQuote(childPtr)->attachQuote(); - } } } @@ -109,13 +113,13 @@ void PseudoElement::didRecalcStyle(Style::Change) // The renderers inside pseudo elements are anonymous so they don't get notified of recalcStyle and must have // the style propagated downward manually similar to RenderObject::propagateStyleToAnonymousChildren. - RenderObject* renderer = this->renderer(); - for (RenderObject* child = renderer->nextInPreOrder(renderer); child; child = child->nextInPreOrder(renderer)) { + RenderElement& renderer = *this->renderer(); + for (RenderObject* child = renderer.nextInPreOrder(&renderer); child; child = child->nextInPreOrder(&renderer)) { // We only manage the style for the generated content which must be images or text. - if (!child->isRenderImage() && !child->isQuote()) + if (!is<RenderImage>(*child) && !is<RenderQuote>(*child)) continue; - PassRef<RenderStyle> createdStyle = RenderStyle::createStyleInheritingFromPseudoStyle(renderer->style()); - toRenderElement(*child).setStyle(std::move(createdStyle)); + auto createdStyle = RenderStyle::createStyleInheritingFromPseudoStyle(renderer.style()); + downcast<RenderElement>(*child).setStyle(WTFMove(createdStyle)); } } |