| 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
|
|
|