Index: Source/platform/LifecycleNotifier.h |
diff --git a/Source/platform/LifecycleNotifier.h b/Source/platform/LifecycleNotifier.h |
index 64fbb7998f0359ded1380771547e3b26109782e9..16659d52a8e130784203d3e0b9b2d3a058da9124 100644 |
--- a/Source/platform/LifecycleNotifier.h |
+++ b/Source/platform/LifecycleNotifier.h |
@@ -34,25 +34,21 @@ |
namespace blink { |
-template<typename T> |
+template<typename T, typename Observer> |
class LifecycleNotifier { |
public: |
- typedef LifecycleObserver<T> Observer; |
typedef T Context; |
virtual ~LifecycleNotifier(); |
virtual bool isContextThread() const { return true; } |
// notifyContextDestroyed() should be explicitly dispatched from an |
- // observed context to notify observers contextDestroyed(). |
- // At the point of contextDestroyed() is called, m_context is still |
- // valid and thus it is safe to use m_context during the notification. |
+ // observed context to notify observers that contextDestroyed(). |
+ // |
+ // When contextDestroyed() is called, m_context is still |
+ // valid and safe to use m_context during the notification. |
virtual void notifyContextDestroyed(); |
- // FIXME: this won't need to be virtual anymore. |
- virtual void addObserver(Observer*); |
- virtual void removeObserver(Observer*); |
- |
DEFINE_INLINE_VIRTUAL_TRACE() { } |
bool isIteratingOverObservers() const { return m_iterating != IteratingNone; } |
@@ -65,35 +61,37 @@ protected: |
{ |
} |
+ void addObserver(Observer*); |
+ void removeObserver(Observer*); |
+ |
Context* context() const { return m_context; } |
enum IterationType { |
IteratingNone, |
haraken
2015/03/01 09:18:39
It looks like IteratingNone is unused.
sof
2015/03/01 17:21:37
It represents the default no-current-iteration sta
|
IteratingOverAll, |
IteratingOverActiveDOMObjects, |
- IteratingOverDocumentObservers, |
- IteratingOverPageObservers, |
- IteratingOverDOMWindowObservers |
}; |
IterationType m_iterating; |
-private: |
- typedef HashSet<Observer*> ObserverSet; |
+protected: |
+ using ObserverSet = HashSet<Observer*>; |
ObserverSet m_observers; |
+ |
+private: |
Context* m_context; |
bool m_didCallContextDestroyed; |
}; |
-template<typename T> |
-inline LifecycleNotifier<T>::~LifecycleNotifier() |
+template<typename T, typename Observer> |
+inline LifecycleNotifier<T, Observer>::~LifecycleNotifier() |
{ |
// FIXME: Enable the following ASSERT. Also see a FIXME in Document::detach(). |
// ASSERT(!m_observers.size() || m_didCallContextDestroyed); |
#if !ENABLE(OILPAN) |
- TemporaryChange<IterationType> scope(this->m_iterating, IteratingOverAll); |
+ TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll); |
for (Observer* observer : m_observers) { |
ASSERT(observer->lifecycleContext() == m_context); |
observer->clearLifecycleContext(); |
@@ -101,14 +99,14 @@ inline LifecycleNotifier<T>::~LifecycleNotifier() |
#endif |
} |
-template<typename T> |
-inline void LifecycleNotifier<T>::notifyContextDestroyed() |
+template<typename T, typename Observer> |
+inline void LifecycleNotifier<T, Observer>::notifyContextDestroyed() |
{ |
// Don't notify contextDestroyed() twice. |
if (m_didCallContextDestroyed) |
return; |
- TemporaryChange<IterationType> scope(this->m_iterating, IteratingOverAll); |
+ TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll); |
Vector<Observer*> snapshotOfObservers; |
copyToVector(m_observers, snapshotOfObservers); |
for (Observer* observer : snapshotOfObservers) { |
@@ -125,15 +123,15 @@ inline void LifecycleNotifier<T>::notifyContextDestroyed() |
m_didCallContextDestroyed = true; |
} |
-template<typename T> |
-inline void LifecycleNotifier<T>::addObserver(typename LifecycleNotifier<T>::Observer* observer) |
+template<typename T, typename Observer> |
+inline void LifecycleNotifier<T, Observer>::addObserver(Observer* observer) |
{ |
RELEASE_ASSERT(m_iterating != IteratingOverAll); |
m_observers.add(observer); |
} |
-template<typename T> |
-inline void LifecycleNotifier<T>::removeObserver(typename LifecycleNotifier<T>::Observer* observer) |
+template<typename T, typename Observer> |
+inline void LifecycleNotifier<T, Observer>::removeObserver(Observer* observer) |
{ |
m_observers.remove(observer); |
} |