Index: third_party/WebKit/Source/core/animation/AnimationTimeline.cpp |
diff --git a/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp b/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp |
index 14882ee5cee826d20c1119988f98d082b565882d..d39fd4b3aa9a53b9b7ad36e3529a523f86a20c13 100644 |
--- a/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp |
+++ b/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp |
@@ -72,6 +72,7 @@ AnimationTimeline::AnimationTimeline(Document* document, PlatformTiming* timing) |
, m_playbackRate(1) |
, m_lastCurrentTimeInternal(0) |
{ |
+ ThreadState::current()->registerPreFinalizer(this); |
if (!timing) |
m_timing = new AnimationTimelineTiming(this); |
else |
@@ -89,6 +90,17 @@ AnimationTimeline::~AnimationTimeline() |
{ |
} |
+void AnimationTimeline::dispose() |
+{ |
+ // The Animation objects depend on using this AnimationTimeline to |
+ // unregister from its underlying compositor timeline. To arrange |
+ // for that safely, this dispose() method will return first |
+ // during prefinalization, notifying each Animation object of |
+ // impending destruction. |
+ for (const auto& animation : m_animations) |
+ animation->dispose(); |
+} |
+ |
bool AnimationTimeline::isActive() |
{ |
return m_document && m_document->page(); |