Index: Source/core/css/resolver/StyleResolver.cpp |
diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp |
index 10638405cd9184128caf9fe31269b5eb60ab9511..0ea3837c1444ba3d25d6dc6bb012437a99034a4c 100644 |
--- a/Source/core/css/resolver/StyleResolver.cpp |
+++ b/Source/core/css/resolver/StyleResolver.cpp |
@@ -828,16 +828,22 @@ PassRefPtr<PseudoElement> StyleResolver::createPseudoElementIfNeeded(Element& pa |
return nullptr; |
RenderStyle* parentStyle = parentRenderer->style(); |
+ if (RenderStyle* cachedStyle = parentStyle->getCachedPseudoStyle(pseudoId)) { |
+ if (!pseudoElementRendererIsNeeded(cachedStyle)) |
+ return nullptr; |
+ return PseudoElement::create(&parent, pseudoId); |
+ } |
+ |
StyleResolverState state(document(), &parent, parentStyle); |
if (!pseudoStyleForElementInternal(parent, pseudoId, parentStyle, state)) |
return nullptr; |
RefPtr<RenderStyle> style = state.takeStyle(); |
ASSERT(style); |
+ parentStyle->addCachedPseudoStyle(style); |
if (!pseudoElementRendererIsNeeded(style.get())) |
return nullptr; |
- parentStyle->addCachedPseudoStyle(style.release()); |
RefPtr<PseudoElement> pseudo = PseudoElement::create(&parent, pseudoId); |
setAnimationUpdateIfNeeded(state, *pseudo); |