Index: Source/platform/scroll/ScrollableArea.cpp |
diff --git a/Source/platform/scroll/ScrollableArea.cpp b/Source/platform/scroll/ScrollableArea.cpp |
index f1704953f0a5b59e98c1fe0d1817a5658c6be6a6..c5a7365096fe8b5f14ffee32125cd8c19568449d 100644 |
--- a/Source/platform/scroll/ScrollableArea.cpp |
+++ b/Source/platform/scroll/ScrollableArea.cpp |
@@ -430,10 +430,19 @@ bool ScrollableArea::scheduleAnimation() |
void ScrollableArea::serviceScrollAnimations(double monotonicTime) |
{ |
- if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) |
+ bool hasRunningAnimation = false; |
+ if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) { |
scrollAnimator->serviceScrollAnimations(); |
- if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) |
+ if (scrollAnimator->hasRunningAnimation()) |
+ hasRunningAnimation = true; |
+ } |
+ if (ProgrammaticScrollAnimator* programmaticScrollAnimator = existingProgrammaticScrollAnimator()) { |
programmaticScrollAnimator->tickAnimation(monotonicTime); |
+ if (programmaticScrollAnimator->hasRunningAnimation()) |
+ hasRunningAnimation = true; |
+ } |
+ if (!hasRunningAnimation) |
+ deregisterForAnimation(); |
} |
void ScrollableArea::cancelProgrammaticScrollAnimation() |