Index: Source/core/dom/SimpleLifecycleNotifier.cpp |
diff --git a/Source/core/dom/ContextLifecycleObserver.cpp b/Source/core/dom/SimpleLifecycleNotifier.cpp |
similarity index 56% |
copy from Source/core/dom/ContextLifecycleObserver.cpp |
copy to Source/core/dom/SimpleLifecycleNotifier.cpp |
index 656f54e247681a3801ccc64453bbb68c7ee45ce3..80d47c755a847e6f63a209e765340d2c96cc4599 100644 |
--- a/Source/core/dom/ContextLifecycleObserver.cpp |
+++ b/Source/core/dom/SimpleLifecycleNotifier.cpp |
@@ -1,5 +1,6 @@ |
/* |
* Copyright (C) 2008 Apple Inc. All Rights Reserved. |
+ * Copyright (C) 2013 Google Inc. All Rights Reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
@@ -25,42 +26,43 @@ |
*/ |
#include "config.h" |
-#include "core/dom/ContextLifecycleObserver.h" |
- |
-#include "core/dom/ScriptExecutionContext.h" |
+#include "core/dom/SimpleLifecycleNotifier.h" |
namespace WebCore { |
-ContextLifecycleObserver::ContextLifecycleObserver(ScriptExecutionContext* scriptExecutionContext, Type type) |
- : m_scriptExecutionContext(0) |
+SimpleLifecycleNotifier::SimpleLifecycleNotifier(SimpleLifecycleContext* context) |
+ : m_context(context) |
+ , m_inDestructor(false) |
+ , m_iterating(IteratingNone) |
{ |
- observeContext(scriptExecutionContext, type); |
} |
-ContextLifecycleObserver::~ContextLifecycleObserver() |
+SimpleLifecycleNotifier::~SimpleLifecycleNotifier() |
{ |
- if (m_scriptExecutionContext) |
- observeContext(0, GenericType); |
+ m_inDestructor = true; |
+ for (SimpleObserverSet::iterator it = m_observers.begin(); it != m_observers.end(); it = m_observers.begin()) { |
+ SimpleLifecycleObserver* observer = *it; |
+ m_observers.remove(observer); |
+ ASSERT(observer->simpleLifecycleContext() == m_context); |
+ observer->contextDestroyed(); |
+ } |
} |
-void ContextLifecycleObserver::observeContext(ScriptExecutionContext* scriptExecutionContext, Type as) |
+void SimpleLifecycleNotifier::addObserver(SimpleLifecycleObserver* observer, SimpleLifecycleObserver::Type type) |
{ |
- if (m_scriptExecutionContext) { |
- ASSERT(m_scriptExecutionContext->isContextThread()); |
- m_scriptExecutionContext->wasUnobservedBy(this, as); |
- } |
- |
- m_scriptExecutionContext = scriptExecutionContext; |
+ RELEASE_ASSERT(!m_inDestructor); |
+ m_observers.add(observer); |
+} |
- if (m_scriptExecutionContext) { |
- ASSERT(m_scriptExecutionContext->isContextThread()); |
- m_scriptExecutionContext->wasObservedBy(this, as); |
- } |
+void SimpleLifecycleNotifier::removeObserver(SimpleLifecycleObserver* observer, SimpleLifecycleObserver::Type type) |
+{ |
+ RELEASE_ASSERT(!m_inDestructor); |
+ m_observers.remove(observer); |
} |
-void ContextLifecycleObserver::contextDestroyed() |
+SimpleLifecycleContext* SimpleLifecycleNotifier::context() |
{ |
- m_scriptExecutionContext = 0; |
+ return m_context; |
} |
} // namespace WebCore |