Index: Source/platform/LifecycleNotifier.h |
diff --git a/Source/platform/LifecycleNotifier.h b/Source/platform/LifecycleNotifier.h |
index c256694dfba92484ce5d006beacc332a09a86d42..f465555b68199f20cde0ffa1a8b5039b385257bf 100644 |
--- a/Source/platform/LifecycleNotifier.h |
+++ b/Source/platform/LifecycleNotifier.h |
@@ -27,9 +27,8 @@ |
#ifndef LifecycleNotifier_h |
#define LifecycleNotifier_h |
-#include "platform/LifecycleObserver.h" |
+#include "platform/heap/Handle.h" |
#include "wtf/HashSet.h" |
-#include "wtf/PassOwnPtr.h" |
#include "wtf/TemporaryChange.h" |
namespace blink { |
@@ -37,10 +36,7 @@ namespace blink { |
template<typename T, typename Observer> |
class LifecycleNotifier { |
public: |
- typedef T Context; |
- |
virtual ~LifecycleNotifier(); |
- virtual bool isContextThread() const { return true; } |
void addObserver(Observer*); |
void removeObserver(Observer*); |
@@ -48,8 +44,8 @@ public: |
// notifyContextDestroyed() should be explicitly dispatched from an |
// 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. |
+ // When contextDestroyed() is called, the observer's lifecycleContext() |
+ // is still valid and safe to use during the notification. |
virtual void notifyContextDestroyed(); |
DEFINE_INLINE_VIRTUAL_TRACE() { } |
@@ -57,15 +53,12 @@ public: |
bool isIteratingOverObservers() const { return m_iterating != IteratingNone; } |
protected: |
- explicit LifecycleNotifier(Context* context) |
+ LifecycleNotifier() |
: m_iterating(IteratingNone) |
- , m_context(context) |
, m_didCallContextDestroyed(false) |
{ |
} |
- Context* context() const { return m_context; } |
- |
enum IterationType { |
IteratingNone, |
IteratingOverAll, |
@@ -79,8 +72,11 @@ protected: |
ObserverSet m_observers; |
+#if ENABLE(ASSERT) |
+ T* context() { return static_cast<T*>(this); } |
+#endif |
+ |
private: |
- Context* m_context; |
bool m_didCallContextDestroyed; |
}; |
@@ -93,7 +89,7 @@ inline LifecycleNotifier<T, Observer>::~LifecycleNotifier() |
#if !ENABLE(OILPAN) |
TemporaryChange<IterationType> scope(m_iterating, IteratingOverAll); |
for (Observer* observer : m_observers) { |
- ASSERT(observer->lifecycleContext() == m_context); |
+ ASSERT(observer->lifecycleContext() == context()); |
observer->clearLifecycleContext(); |
} |
#endif |
@@ -116,7 +112,7 @@ inline void LifecycleNotifier<T, Observer>::notifyContextDestroyed() |
// a HeapHashSet<WeakMember<Observers>>. (i.e., we can just iterate |
// m_observers without taking a snapshot). |
if (m_observers.contains(observer)) { |
- ASSERT(observer->lifecycleContext() == m_context); |
+ ASSERT(observer->lifecycleContext() == context()); |
observer->contextDestroyed(); |
} |
} |