Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (275276 => 275277)
--- trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-03-31 11:16:12 UTC (rev 275276)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-03-31 12:16:18 UTC (rev 275277)
@@ -222,7 +222,7 @@
m_document.setHasNodesWithNonFinalStyle();
}
- auto update = createAnimatedElementUpdate(WTFMove(newStyle), styleable, parent().change);
+ auto update = createAnimatedElementUpdate(WTFMove(newStyle), styleable, parent().change, parent().style, parentBoxStyle());
auto descendantsToResolve = computeDescendantsToResolve(update.change, element.styleValidity(), parent().descendantsToResolve);
if (&element == m_document.documentElement()) {
@@ -278,8 +278,11 @@
return { };
if (!elementUpdate.style->hasPseudoStyle(pseudoId))
return { };
-
- auto pseudoStyle = scope().resolver.pseudoStyleForElement(element, { pseudoId }, *elementUpdate.style, parentBoxStyleForPseudo(elementUpdate), &scope().selectorFilter);
+
+ auto& parentStyle = *elementUpdate.style;
+ auto* parentBoxStyle = parentBoxStyleForPseudo(elementUpdate);
+
+ auto pseudoStyle = scope().resolver.pseudoStyleForElement(element, { pseudoId }, parentStyle, parentBoxStyle, &scope().selectorFilter);
if (!pseudoStyle)
return { };
@@ -287,7 +290,7 @@
if (!pseudoElementRendererIsNeeded(pseudoStyle.get()) && !hasAnimations)
return { };
- return createAnimatedElementUpdate(WTFMove(pseudoStyle), { element, pseudoId }, elementUpdate.change);
+ return createAnimatedElementUpdate(WTFMove(pseudoStyle), { element, pseudoId }, elementUpdate.change, parentStyle, parentBoxStyle);
}
const RenderStyle* TreeResolver::parentBoxStyle() const
@@ -316,9 +319,10 @@
}
}
-ElementUpdate TreeResolver::createAnimatedElementUpdate(std::unique_ptr<RenderStyle> newStyle, const Styleable& styleable, Change parentChange)
+ElementUpdate TreeResolver::createAnimatedElementUpdate(std::unique_ptr<RenderStyle> newStyle, const Styleable& styleable, Change parentChange, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle)
{
auto& element = styleable.element;
+ auto& document = element.document();
auto* oldStyle = element.renderOrDisplayContentsStyle(styleable.pseudoId);
OptionSet<AnimationImpact> animationImpact;
@@ -326,15 +330,15 @@
// First, we need to make sure that any new CSS animation occuring on this element has a matching WebAnimation
// on the document timeline. Note that we get timeline() on the Document here because we need a timeline created
// in case no Web Animations have been created through the JS API.
- if (element.document().backForwardCacheState() == Document::NotInBackForwardCache && !element.document().renderView()->printing()) {
+ if (document.backForwardCacheState() == Document::NotInBackForwardCache && !document.renderView()->printing()) {
if (oldStyle && (oldStyle->hasTransitions() || newStyle->hasTransitions()))
- m_document.timeline().updateCSSTransitionsForStyleable(styleable, *oldStyle, *newStyle);
+ document.timeline().updateCSSTransitionsForStyleable(styleable, *oldStyle, *newStyle);
// The order in which CSS Transitions and CSS Animations are updated matters since CSS Transitions define the after-change style
// to use CSS Animations as defined in the previous style change event. As such, we update CSS Animations after CSS Transitions
// such that when CSS Transitions are updated the CSS Animations data is the same as during the previous style change event.
if ((oldStyle && oldStyle->hasAnimations()) || newStyle->hasAnimations())
- m_document.timeline().updateCSSAnimationsForStyleable(styleable, oldStyle, *newStyle, &parent().style);
+ document.timeline().updateCSSAnimationsForStyleable(styleable, oldStyle, *newStyle, &parentStyle);
}
// Now we can update all Web animations, which will include CSS Animations as well
@@ -345,10 +349,10 @@
styleable.setLastStyleChangeEventStyle(RenderStyle::clonePtr(*newStyle));
// Apply all keyframe effects to the new style.
auto animatedStyle = RenderStyle::clonePtr(*newStyle);
- animationImpact = styleable.applyKeyframeEffects(*animatedStyle, *previousLastStyleChangeEventStyle, &parent().style);
+ animationImpact = styleable.applyKeyframeEffects(*animatedStyle, *previousLastStyleChangeEventStyle, &parentStyle);
newStyle = WTFMove(animatedStyle);
- Adjuster adjuster(m_document, parent().style, parentBoxStyle(), styleable.pseudoId == PseudoId::None ? &element : nullptr);
+ Adjuster adjuster(document, parentStyle, parentBoxStyle, styleable.pseudoId == PseudoId::None ? &element : nullptr);
adjuster.adjustAnimatedStyle(*newStyle, animationImpact);
} else
styleable.setLastStyleChangeEventStyle(nullptr);
Modified: trunk/Source/WebCore/style/StyleTreeResolver.h (275276 => 275277)
--- trunk/Source/WebCore/style/StyleTreeResolver.h 2021-03-31 11:16:12 UTC (rev 275276)
+++ trunk/Source/WebCore/style/StyleTreeResolver.h 2021-03-31 12:16:18 UTC (rev 275277)
@@ -61,7 +61,7 @@
ElementUpdates resolveElement(Element&);
- ElementUpdate createAnimatedElementUpdate(std::unique_ptr<RenderStyle>, const Styleable&, Change);
+ static ElementUpdate createAnimatedElementUpdate(std::unique_ptr<RenderStyle>, const Styleable&, Change, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle);
Optional<ElementUpdate> resolvePseudoStyle(Element&, const ElementUpdate&, PseudoId);
struct Scope : RefCounted<Scope> {