| Index: Source/core/dom/ScriptedAnimationController.cpp
|
| diff --git a/Source/core/dom/ScriptedAnimationController.cpp b/Source/core/dom/ScriptedAnimationController.cpp
|
| index 3f5f9b9e41023d58b8ec291289ac85009afd492b..f8f6b3b9414a4367be2921e6966a2e2b382d8bdb 100644
|
| --- a/Source/core/dom/ScriptedAnimationController.cpp
|
| +++ b/Source/core/dom/ScriptedAnimationController.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "config.h"
|
| #include "core/dom/ScriptedAnimationController.h"
|
|
|
| +#include "core/css/MediaQueryListListener.h"
|
| #include "core/dom/Document.h"
|
| #include "core/dom/RequestAnimationFrameCallback.h"
|
| #include "core/events/Event.h"
|
| @@ -57,6 +58,7 @@ void ScriptedAnimationController::trace(Visitor* visitor)
|
| {
|
| visitor->trace(m_document);
|
| visitor->trace(m_eventQueue);
|
| + visitor->trace(m_mediaQueryListListeners);
|
| #if ENABLE(OILPAN)
|
| visitor->trace(m_perFrameEvents);
|
| #endif
|
| @@ -169,9 +171,20 @@ void ScriptedAnimationController::executeCallbacks(double monotonicTimeNow)
|
| m_callbacksToInvoke.clear();
|
| }
|
|
|
| +void ScriptedAnimationController::callMediaQueryListListeners()
|
| +{
|
| + MediaQueryListListeners listeners;
|
| + listeners.swap(m_mediaQueryListListeners);
|
| +
|
| + for (MediaQueryListListeners::const_iterator it = listeners.begin(), end = listeners.end();
|
| + it != end; ++it) {
|
| + (*it)->call();
|
| + }
|
| +}
|
| +
|
| void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTimeNow)
|
| {
|
| - if (!m_callbacks.size() && !m_eventQueue.size())
|
| + if (!m_callbacks.size() && !m_eventQueue.size() && !m_mediaQueryListListeners.size())
|
| return;
|
|
|
| if (m_suspendCount)
|
| @@ -179,6 +192,7 @@ void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime
|
|
|
| RefPtrWillBeRawPtr<ScriptedAnimationController> protect(this);
|
|
|
| + callMediaQueryListListeners();
|
| dispatchEvents();
|
| executeCallbacks(monotonicTimeNow);
|
|
|
| @@ -199,6 +213,14 @@ void ScriptedAnimationController::enqueuePerFrameEvent(PassRefPtrWillBeRawPtr<Ev
|
| enqueueEvent(event);
|
| }
|
|
|
| +void ScriptedAnimationController::enqueueMediaQueryChangeListeners(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >& listeners)
|
| +{
|
| + for (size_t i = 0; i < listeners.size(); ++i) {
|
| + m_mediaQueryListListeners.add(listeners[i]);
|
| + }
|
| + scheduleAnimationIfNeeded();
|
| +}
|
| +
|
| void ScriptedAnimationController::scheduleAnimationIfNeeded()
|
| {
|
| if (!m_document)
|
| @@ -207,7 +229,7 @@ void ScriptedAnimationController::scheduleAnimationIfNeeded()
|
| if (m_suspendCount)
|
| return;
|
|
|
| - if (!m_callbacks.size() && !m_eventQueue.size())
|
| + if (!m_callbacks.size() && !m_eventQueue.size() && !m_mediaQueryListListeners.size())
|
| return;
|
|
|
| if (FrameView* frameView = m_document->view())
|
|
|