Index: Source/core/events/EventSender.h |
=================================================================== |
--- Source/core/events/EventSender.h (revision 159156) |
+++ Source/core/events/EventSender.h (working copy) |
@@ -1,113 +0,0 @@ |
-/* |
- * Copyright (C) 2012 Apple Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
- * THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#ifndef EventSender_h |
-#define EventSender_h |
- |
-#include "core/platform/Timer.h" |
-#include "wtf/Vector.h" |
-#include "wtf/text/AtomicString.h" |
- |
-namespace WebCore { |
- |
-template<typename T> class EventSender { |
- WTF_MAKE_NONCOPYABLE(EventSender); WTF_MAKE_FAST_ALLOCATED; |
-public: |
- explicit EventSender(const AtomicString& eventType); |
- |
- const AtomicString& eventType() const { return m_eventType; } |
- void dispatchEventSoon(T*); |
- void cancelEvent(T*); |
- void dispatchPendingEvents(); |
- |
-#ifndef NDEBUG |
- bool hasPendingEvents(T* sender) const |
- { |
- return m_dispatchSoonList.find(sender) != kNotFound || m_dispatchingList.find(sender) != kNotFound; |
- } |
-#endif |
- |
-private: |
- void timerFired(Timer<EventSender<T> >*) { dispatchPendingEvents(); } |
- |
- AtomicString m_eventType; |
- Timer<EventSender<T> > m_timer; |
- Vector<T*> m_dispatchSoonList; |
- Vector<T*> m_dispatchingList; |
-}; |
- |
-template<typename T> EventSender<T>::EventSender(const AtomicString& eventType) |
- : m_eventType(eventType) |
- , m_timer(this, &EventSender::timerFired) |
-{ |
-} |
- |
-template<typename T> void EventSender<T>::dispatchEventSoon(T* sender) |
-{ |
- m_dispatchSoonList.append(sender); |
- if (!m_timer.isActive()) |
- m_timer.startOneShot(0); |
-} |
- |
-template<typename T> void EventSender<T>::cancelEvent(T* sender) |
-{ |
- // Remove instances of this sender from both lists. |
- // Use loops because we allow multiple instances to get into the lists. |
- size_t size = m_dispatchSoonList.size(); |
- for (size_t i = 0; i < size; ++i) { |
- if (m_dispatchSoonList[i] == sender) |
- m_dispatchSoonList[i] = 0; |
- } |
- size = m_dispatchingList.size(); |
- for (size_t i = 0; i < size; ++i) { |
- if (m_dispatchingList[i] == sender) |
- m_dispatchingList[i] = 0; |
- } |
-} |
- |
-template<typename T> void EventSender<T>::dispatchPendingEvents() |
-{ |
- // Need to avoid re-entering this function; if new dispatches are |
- // scheduled before the parent finishes processing the list, they |
- // will set a timer and eventually be processed. |
- if (!m_dispatchingList.isEmpty()) |
- return; |
- |
- m_timer.stop(); |
- |
- m_dispatchingList.swap(m_dispatchSoonList); |
- size_t size = m_dispatchingList.size(); |
- for (size_t i = 0; i < size; ++i) { |
- if (T* sender = m_dispatchingList[i]) { |
- m_dispatchingList[i] = 0; |
- sender->dispatchPendingEvent(this); |
- } |
- } |
- m_dispatchingList.clear(); |
-} |
- |
-} // namespace WebCore |
- |
-#endif // EventSender_h |