Bug 1474247 - Call ReschedulePendingtasks when we set a new target to KeyframeEffect. r?birtles
MozReview-Commit-ID: 1n5I6RPKAM5
--- a/dom/animation/KeyframeEffect.cpp
+++ b/dom/animation/KeyframeEffect.cpp
@@ -953,16 +953,17 @@ KeyframeEffect::SetTarget(const Nullable
MaybeUpdateFrameForCompositor();
RequestRestyle(EffectCompositor::RestyleType::Layer);
nsAutoAnimationMutationBatch mb(mTarget->mElement->OwnerDoc());
if (mAnimation) {
nsNodeUtils::AnimationAdded(mAnimation);
+ mAnimation->ReschedulePendingTasks();
}
}
}
static void
CreatePropertyValue(nsCSSPropertyID aProperty,
float aOffset,
const Maybe<ComputedTimingFunction>& aTimingFunction,
--- a/dom/animation/test/mozilla/test_pending_animation_tracker.html
+++ b/dom/animation/test/mozilla/test_pending_animation_tracker.html
@@ -98,10 +98,25 @@ test(t => {
'The animation should be tracked by tracker');
anim.effect.target = anotherTarget;
assert_true(SpecialPowers.DOMWindowUtils.isAnimationInPendingTracker(anim),
'The animation should be still tracked by tracker');
}, 'Setting another target keeps the pending animation in the tracker');
+test(t => {
+ const effect = new KeyframeEffect(null, null);
+ const anim = new Animation(effect);
+ anim.play();
+ assert_false(SpecialPowers.DOMWindowUtils.isAnimationInPendingTracker(anim),
+ 'The orphaned animation should NOT be tracked by tracker');
+
+ const target = addDiv(t);
+ anim.effect.target = target;
+
+ assert_true(SpecialPowers.DOMWindowUtils.isAnimationInPendingTracker(anim),
+ 'The animation should be now tracked by tracker');
+}, 'Setting target element to the orphaned animation starts being tracked ' +
+ 'by the tracker');
+
</script>
</body>