Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / page / PageAnimator.cpp
index 33b2d83..74ee970 100644 (file)
@@ -29,22 +29,28 @@ 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)
-        documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime);
+    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);
+    }
 
-    // Frame callbacks might have started new players or caused existing players to become outdated.
     for (size_t i = 0; i < documents.size(); ++i)
-        DocumentAnimations::updateOutdatedAnimationPlayersAfterFrameCallbacks(*documents[i]);
+        documents[i]->serviceScriptedAnimations(monotonicAnimationStartTime);
 }
 
 void PageAnimator::scheduleVisualUpdate()