Log Message
Cherry-pick r275277. rdar://problem/76375504
Animated pseudo element style resolved against wrong parent style
https://bugs.webkit.org/show_bug.cgi?id=223990
rdar://74997361
Reviewed by Antoine Quint.
Source/WebCore:
In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack.
This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack.
This matters in style adjuster which may apply wrong adjustments as a result.
Test: fast/animation/pseudo-element-style-adjuster.html
* style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::resolveElement):
(WebCore::Style::TreeResolver::resolvePseudoStyle):
(WebCore::Style::TreeResolver::createAnimatedElementUpdate):
Make static and provide the parent and parent box styles as parameters.
* style/StyleTreeResolver.h:
LayoutTests:
* fast/animation/pseudo-element-style-adjuster-expected.html: Added.
* fast/animation/pseudo-element-style-adjuster.html: Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275277 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
- branches/safari-611-branch/LayoutTests/ChangeLog
- branches/safari-611-branch/Source/WebCore/ChangeLog
- branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.cpp
- branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.h
Added Paths
Diff
Modified: branches/safari-611-branch/LayoutTests/ChangeLog (276125 => 276126)
--- branches/safari-611-branch/LayoutTests/ChangeLog 2021-04-16 08:47:23 UTC (rev 276125)
+++ branches/safari-611-branch/LayoutTests/ChangeLog 2021-04-16 08:53:00 UTC (rev 276126)
@@ -1,3 +1,48 @@
+2021-04-16 Russell Epstein <[email protected]>
+
+ Cherry-pick r275277. rdar://problem/76375504
+
+ Animated pseudo element style resolved against wrong parent style
+ https://bugs.webkit.org/show_bug.cgi?id=223990
+ rdar://74997361
+
+ Reviewed by Antoine Quint.
+ Source/WebCore:
+
+ In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack.
+ This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack.
+
+ This matters in style adjuster which may apply wrong adjustments as a result.
+
+ Test: fast/animation/pseudo-element-style-adjuster.html
+
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::resolveElement):
+ (WebCore::Style::TreeResolver::resolvePseudoStyle):
+ (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
+
+ Make static and provide the parent and parent box styles as parameters.
+
+ * style/StyleTreeResolver.h:
+
+ LayoutTests:
+
+ * fast/animation/pseudo-element-style-adjuster-expected.html: Added.
+ * fast/animation/pseudo-element-style-adjuster.html: Added.
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275277 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-03-31 Antti Koivisto <[email protected]>
+
+ Animated pseudo element style resolved against wrong parent style
+ https://bugs.webkit.org/show_bug.cgi?id=223990
+ rdar://74997361
+
+ Reviewed by Antoine Quint.
+
+ * fast/animation/pseudo-element-style-adjuster-expected.html: Added.
+ * fast/animation/pseudo-element-style-adjuster.html: Added.
+
2021-04-15 Russell Epstein <[email protected]>
Cherry-pick r275656. rdar://problem/76727574
Added: branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster-expected.html (0 => 276126)
--- branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster-expected.html (rev 0)
+++ branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster-expected.html 2021-04-16 08:53:00 UTC (rev 276126)
@@ -0,0 +1,8 @@
+<style>
+.flex { display:flex; }
+.host::before { display:inline-block; content:'On the same'; }
+.host::after { display:inline-block; content:'line'; color:green; }
+</style>
+<div class=flex>
+<div class=host> </div>
+</div>
Added: branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster.html (0 => 276126)
--- branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster.html (rev 0)
+++ branches/safari-611-branch/LayoutTests/fast/animation/pseudo-element-style-adjuster.html 2021-04-16 08:53:00 UTC (rev 276126)
@@ -0,0 +1,12 @@
+<style>
+@keyframes anim {
+ from { color:red; }
+ to { color:green; }
+}
+.flex { display:flex; }
+.host::before { display:inline-block; content:'On the same'; }
+.host::after { display:inline-block; content:'line'; animation-duration:0s; animation-name:anim; animation-fill-mode:forwards; }
+</style>
+<div class=flex>
+<div class=host> </div>
+</div>
Modified: branches/safari-611-branch/Source/WebCore/ChangeLog (276125 => 276126)
--- branches/safari-611-branch/Source/WebCore/ChangeLog 2021-04-16 08:47:23 UTC (rev 276125)
+++ branches/safari-611-branch/Source/WebCore/ChangeLog 2021-04-16 08:53:00 UTC (rev 276126)
@@ -1,3 +1,61 @@
+2021-04-16 Russell Epstein <[email protected]>
+
+ Cherry-pick r275277. rdar://problem/76375504
+
+ Animated pseudo element style resolved against wrong parent style
+ https://bugs.webkit.org/show_bug.cgi?id=223990
+ rdar://74997361
+
+ Reviewed by Antoine Quint.
+ Source/WebCore:
+
+ In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack.
+ This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack.
+
+ This matters in style adjuster which may apply wrong adjustments as a result.
+
+ Test: fast/animation/pseudo-element-style-adjuster.html
+
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::resolveElement):
+ (WebCore::Style::TreeResolver::resolvePseudoStyle):
+ (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
+
+ Make static and provide the parent and parent box styles as parameters.
+
+ * style/StyleTreeResolver.h:
+
+ LayoutTests:
+
+ * fast/animation/pseudo-element-style-adjuster-expected.html: Added.
+ * fast/animation/pseudo-element-style-adjuster.html: Added.
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275277 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-03-31 Antti Koivisto <[email protected]>
+
+ Animated pseudo element style resolved against wrong parent style
+ https://bugs.webkit.org/show_bug.cgi?id=223990
+ rdar://74997361
+
+ Reviewed by Antoine Quint.
+
+ In createAnimatedElementUpdate we get the parent and parent box styles from the parent stack.
+ This is wrong for pseudo elements. Their parent style should the host style which is not pushed to the stack.
+
+ This matters in style adjuster which may apply wrong adjustments as a result.
+
+ Test: fast/animation/pseudo-element-style-adjuster.html
+
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::resolveElement):
+ (WebCore::Style::TreeResolver::resolvePseudoStyle):
+ (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
+
+ Make static and provide the parent and parent box styles as parameters.
+
+ * style/StyleTreeResolver.h:
+
2021-04-15 Russell Epstein <[email protected]>
Cherry-pick r274403. rdar://problem/76374004
Modified: branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.cpp (276125 => 276126)
--- branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.cpp 2021-04-16 08:47:23 UTC (rev 276125)
+++ branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.cpp 2021-04-16 08:53:00 UTC (rev 276126)
@@ -221,7 +221,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()) {
@@ -277,8 +277,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 { };
@@ -286,7 +289,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
@@ -315,9 +318,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;
@@ -325,9 +329,9 @@
// 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
@@ -353,7 +357,7 @@
animationImpact = styleable.applyKeyframeEffects(*animatedStyle, *previousLastStyleChangeEventStyle);
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: branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.h (276125 => 276126)
--- branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.h 2021-04-16 08:47:23 UTC (rev 276125)
+++ branches/safari-611-branch/Source/WebCore/style/StyleTreeResolver.h 2021-04-16 08:53:00 UTC (rev 276126)
@@ -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> {
_______________________________________________ webkit-changes mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-changes
