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

Unified Diff: Source/core/css/MediaQueryList.h

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/MediaQueryList.h
diff --git a/Source/core/css/MediaQueryList.h b/Source/core/css/MediaQueryList.h
index 73beebd28ff5289dc3eedde5af2fb7f117f28cf1..b4b11cbb99f5bd72a6d28abdee5ba8fb2bb12755 100644
--- a/Source/core/css/MediaQueryList.h
+++ b/Source/core/css/MediaQueryList.h
@@ -39,16 +39,35 @@ class MediaQuerySet;
class MediaQueryList FINAL : public RefCountedWillBeGarbageCollectedFinalized<MediaQueryList> {
public:
+ class Listener : public RefCountedWillBeGarbageCollectedFinalized<Listener> {
esprehn 2014/07/01 00:01:06 This virtual abstraction seems like it could be a
cbiesinger 2014/07/01 00:12:09 It could. Want me to do that?
+ public:
+ virtual ~Listener() { }
+ virtual void mediaQueryChanged() = 0;
+ virtual bool equals(Listener* other) { return this == other; }
esprehn 2014/07/01 00:01:06 This shouldn't need to be virtual.
cbiesinger 2014/07/01 00:12:09 How so? The implementation for JS listeners needs
+
+ virtual MediaQueryListListener* isMediaQueryListListener() { return nullptr; }
+
+ // Used to keep the MediaQueryList alive and registered with the MediaQueryMatcher
+ // as long as the listener exists.
+ void setMediaQueryList(MediaQueryList* query) { m_query = query; }
+ void clearMediaQueryList() { m_query = nullptr; }
+
+ void trace(Visitor* visitor) { visitor->trace(m_query); }
+ protected:
+ RefPtrWillBeMember<MediaQueryList> m_query;
+ };
+
static PassRefPtrWillBeRawPtr<MediaQueryList> create(PassRefPtrWillBeRawPtr<MediaQueryMatcher>, PassRefPtrWillBeRawPtr<MediaQuerySet>);
virtual ~MediaQueryList();
String media() const;
bool matches();
- void addListener(PassRefPtrWillBeRawPtr<MediaQueryListListener>);
- void removeListener(PassRefPtrWillBeRawPtr<MediaQueryListListener>);
+ // These listeners will be called at requestAnimationFrame time.
+ void addListener(PassRefPtrWillBeRawPtr<Listener>);
+ void removeListener(PassRefPtrWillBeRawPtr<Listener>);
- void mediaFeaturesChanged(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >* toNotify);
+ void mediaFeaturesChanged(WillBeHeapVector<RefPtrWillBeMember<Listener> >* listenersToNotify);
void trace(Visitor*);
@@ -61,7 +80,7 @@ private:
RefPtrWillBeMember<MediaQueryMatcher> m_matcher;
RefPtrWillBeMember<MediaQuerySet> m_media;
- typedef WillBeHeapListHashSet<RefPtrWillBeMember<MediaQueryListListener> > ListenerList;
+ typedef WillBeHeapListHashSet<RefPtrWillBeMember<Listener> > ListenerList;
ListenerList m_listeners;
bool m_matchesDirty;
bool m_matches;

Powered by Google App Engine
This is Rietveld 408576698