Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: Source/core/css/MediaQueryMatcher.cpp

Issue 337883003: Call media query change listeners asynchronously. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: tests fixed Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698