Chromium Code Reviews| Index: Source/core/css/MediaQueryList.cpp |
| diff --git a/Source/core/css/MediaQueryList.cpp b/Source/core/css/MediaQueryList.cpp |
| index f21c99006e607f37c81dcf7ac24c23608039ddb1..b5ff9af4dde9556d418ef449a31e0aa1370c3e1b 100644 |
| --- a/Source/core/css/MediaQueryList.cpp |
| +++ b/Source/core/css/MediaQueryList.cpp |
| @@ -24,6 +24,7 @@ |
| #include "core/css/MediaQueryEvaluator.h" |
| #include "core/css/MediaQueryListListener.h" |
| #include "core/css/MediaQueryMatcher.h" |
| +#include "core/dom/Document.h" |
| namespace blink { |
| @@ -41,6 +42,7 @@ MediaQueryList::MediaQueryList(ExecutionContext* context, PassRefPtrWillBeRawPtr |
| , m_matchesDirty(true) |
| , m_matches(false) |
| { |
| + ScriptWrappable::init(this); |
| m_matcher->addMediaQueryList(this); |
| updateMatches(); |
| } |
| @@ -57,7 +59,17 @@ String MediaQueryList::media() const |
| return m_media->mediaText(); |
| } |
| -void MediaQueryList::addListener(PassRefPtrWillBeRawPtr<MediaQueryListListener> listener) |
| +void MediaQueryList::addListener(PassRefPtr<EventListener> listener) |
| +{ |
| + addEventListener("change", listener, false); |
| +} |
| + |
| +void MediaQueryList::removeListener(PassRefPtr<EventListener> listener) |
| +{ |
| + removeEventListener("change", listener.get(), false); |
| +} |
| + |
| +void MediaQueryList::addMediaQueryListListener(PassRefPtrWillBeRawPtr<MediaQueryListListener> listener) |
|
haraken
2014/07/20 05:14:49
Just help me understand: Why do we want to use m_l
cbiesinger
2014/07/21 22:07:19
I've been told that using DOM events for C++ liste
haraken
2014/07/22 01:30:12
I think Elliott would know better.
|
| { |
| if (!listener) |
| return; |
| @@ -66,7 +78,7 @@ void MediaQueryList::addListener(PassRefPtrWillBeRawPtr<MediaQueryListListener> |
| m_listeners.add(listener); |
| } |
| -void MediaQueryList::removeListener(PassRefPtrWillBeRawPtr<MediaQueryListListener> listener) |
| +void MediaQueryList::removeMediaQueryListListener(PassRefPtrWillBeRawPtr<MediaQueryListListener> listener) |
| { |
| if (!listener) |
| return; |
| @@ -86,22 +98,24 @@ void MediaQueryList::removeListener(PassRefPtrWillBeRawPtr<MediaQueryListListene |
| bool MediaQueryList::hasPendingActivity() const |
| { |
| - return m_listeners.size(); |
| + return m_listeners.size() || hasEventListeners(EventTypeNames::change); |
| } |
| void MediaQueryList::stop() |
| { |
| m_listeners.clear(); |
| + removeAllEventListeners(); |
|
haraken
2014/07/20 05:14:49
This will remove all event listeners other than on
cbiesinger
2014/07/21 22:07:19
By my understanding of ActiveDOMEvent::stop that i
|
| } |
| -void MediaQueryList::mediaFeaturesChanged(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >* listenersToNotify) |
| +bool MediaQueryList::mediaFeaturesChanged(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >* listenersToNotify) |
| { |
| m_matchesDirty = true; |
| if (!updateMatches()) |
| - return; |
| + return false; |
| for (ListenerList::const_iterator it = m_listeners.begin(), end = m_listeners.end(); it != end; ++it) { |
| listenersToNotify->append(*it); |
| } |
| + return hasEventListeners(EventTypeNames::change); |
| } |
| bool MediaQueryList::updateMatches() |
| @@ -122,6 +136,7 @@ bool MediaQueryList::matches() |
| void MediaQueryList::trace(Visitor* visitor) |
| { |
| + EventTargetWithInlineData::trace(visitor); |
|
haraken
2014/07/20 05:14:49
Nit: We normally make this a tail call of the trac
cbiesinger
2014/07/21 22:07:19
Done.
|
| #if ENABLE(OILPAN) |
| visitor->trace(m_matcher); |
| visitor->trace(m_media); |
| @@ -129,4 +144,14 @@ void MediaQueryList::trace(Visitor* visitor) |
| #endif |
| } |
| +const AtomicString& MediaQueryList::interfaceName() const |
| +{ |
| + return EventTargetNames::MediaQueryList; |
| +} |
| + |
| +ExecutionContext* MediaQueryList::executionContext() const |
| +{ |
| + return ActiveDOMObject::executionContext(); |
| +} |
| + |
| } |