Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Unified Diff: Source/core/dom/SimpleLifecycleNotifier.cpp

Issue 18777003: Extract simpler classes for observing context lifecycle and observe Page lifecycle inNavigatorVibra… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Use SimpleLifecycleObserver in addObserver / removeObserver. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698