Chromium Code Reviews| Index: Source/core/dom/ScriptedAnimationController.cpp |
| diff --git a/Source/core/dom/ScriptedAnimationController.cpp b/Source/core/dom/ScriptedAnimationController.cpp |
| index 3f5f9b9e41023d58b8ec291289ac85009afd492b..da0458e54ce13ed8307ab2910d78edf2f1a5b811 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" |
| @@ -169,9 +170,20 @@ void ScriptedAnimationController::executeCallbacks(double monotonicTimeNow) |
| m_callbacksToInvoke.clear(); |
| } |
| +void ScriptedAnimationController::callMediaQueryListListeners() |
| +{ |
| + MediaQueryListListeners listeners; |
| + listeners.swap(m_mediaQueryListListeners); |
| + |
| + for (MediaQueryListListeners::const_iterator it = m_mediaQueryListListeners.begin(), end = m_mediaQueryListListeners.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 +191,7 @@ void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime |
| RefPtrWillBeRawPtr<ScriptedAnimationController> protect(this); |
| + callMediaQueryListListeners(); |
| dispatchEvents(); |
| executeCallbacks(monotonicTimeNow); |
| @@ -199,6 +212,15 @@ void ScriptedAnimationController::enqueuePerFrameEvent(PassRefPtrWillBeRawPtr<Ev |
| enqueueEvent(event); |
| } |
| +void ScriptedAnimationController::enqueueMediaQueryChangeListeners(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >& listeners) |
| +{ |
| + for (size_t i = 0; i < listeners.size(); ++i) { |
| + if (!m_mediaQueryListListeners.contains(listeners[i])) |
| + m_mediaQueryListListeners.add(listeners[i]); |
|
esprehn
2014/07/01 01:21:26
You want a ListHashSet for this.
|
| + } |
| + 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()) |