summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/PseudoElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/PseudoElement.cpp')
-rw-r--r--Source/WebCore/dom/PseudoElement.cpp40
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));
}
}