Index: Source/core/css/MediaQueryMatcher.cpp |
diff --git a/Source/core/css/MediaQueryMatcher.cpp b/Source/core/css/MediaQueryMatcher.cpp |
index c9e748ea306699aa06658f8c756d77aa2e86f90d..89bcf843511b67512dab75de90e07624f28a17f5 100644 |
--- a/Source/core/css/MediaQueryMatcher.cpp |
+++ b/Source/core/css/MediaQueryMatcher.cpp |
@@ -26,6 +26,7 @@ |
#include "core/css/MediaQueryListListener.h" |
#include "core/css/resolver/StyleResolver.h" |
#include "core/dom/Document.h" |
+#include "core/dom/ScriptedAnimationController.h" |
#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
@@ -105,18 +106,29 @@ void MediaQueryMatcher::mediaFeaturesChanged() |
if (!m_document) |
return; |
- WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> > listenersToNotify; |
+ WillBeHeapVector<RefPtrWillBeMember<MediaQueryList::Listener> > listenersToNotify; |
for (MediaQueryListSet::iterator it = m_mediaLists.begin(); it != m_mediaLists.end(); ++it) |
(*it)->mediaFeaturesChanged(&listenersToNotify); |
- // FIXME: This should be async! We're running script inside ::layout() or ::updateRenderTree(). |
for (size_t i = 0; i < listenersToNotify.size(); ++i) |
- listenersToNotify[i]->call(); |
+ m_delayedListeners.append(listenersToNotify[i]); |
+ |
+ m_document->ensureScriptedAnimationController().scheduleAnimationIfNeeded(); |
esprehn
2014/07/01 00:01:06
scheduleAnimationIfNeeded() should be private, I t
cbiesinger
2014/07/01 00:12:09
On PageAnimator? Hm... I'm not positive but I don'
|
+} |
+ |
+void MediaQueryMatcher::notifyDelayedListeners() |
+{ |
+ WillBeHeapVector<RefPtrWillBeMember<MediaQueryList::Listener> > listeners; |
+ listeners.swap(m_delayedListeners); |
+ |
+ for (size_t i = 0; i < listeners.size(); ++i) |
+ listeners[i]->mediaQueryChanged(); |
} |
void MediaQueryMatcher::trace(Visitor* visitor) |
{ |
visitor->trace(m_document); |
+ visitor->trace(m_delayedListeners); |
visitor->trace(m_mediaLists); |
} |