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