Index: Source/core/page/PageAnimator.cpp |
diff --git a/Source/core/page/PageAnimator.cpp b/Source/core/page/PageAnimator.cpp |
index 33b2d8365e336c68681c12392a40b464b532858b..2ab467b592559b24680d1ad5781078fa46af4657 100644 |
--- a/Source/core/page/PageAnimator.cpp |
+++ b/Source/core/page/PageAnimator.cpp |
@@ -29,16 +29,26 @@ void PageAnimator::serviceScriptedAnimations(double monotonicAnimationStartTime) |
m_animationFramePending = false; |
TemporaryChange<bool> servicing(m_servicingAnimations, true); |
- for (RefPtr<LocalFrame> frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { |
- frame->view()->serviceScrollAnimations(); |
- DocumentAnimations::updateAnimationTimingForAnimationFrame(*frame->document(), monotonicAnimationStartTime); |
- SVGDocumentExtensions::serviceOnAnimationFrame(*frame->document(), monotonicAnimationStartTime); |
- } |
- |
Vector<RefPtr<Document> > documents; |
- for (LocalFrame* frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) |
+ for (RefPtr<LocalFrame> frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) |
documents.append(frame->document()); |
+ for (size_t i = 0; i < documents.size(); ++i) { |
+ if (documents[i]->frame()) { |
+ documents[i]->view()->serviceScrollAnimations(); |
+ |
+ if (const FrameView::ScrollableAreaSet* scrollableAreas = documents[i]->view()->scrollableAreas()) { |
+ for (FrameView::ScrollableAreaSet::iterator it = scrollableAreas->begin(); it != scrollableAreas->end(); ++it) |
+ (*it)->serviceScrollAnimations(); |
+ } |
+ } |
+ } |
+ |
+ for (size_t i = 0; i < documents.size(); ++i) { |
+ DocumentAnimations::updateAnimationTimingForAnimationFrame(*documents[i], monotonicAnimationStartTime); |
+ SVGDocumentExtensions::serviceOnAnimationFrame(*documents[i], monotonicAnimationStartTime); |
+ } |
+ |
for (size_t i = 0; i < documents.size(); ++i) |
documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime); |