| 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();
|
| }
|
| }
|
|
|