Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / keyed_service / content / browser_context_dependency_manager.cc
index ab46074..9498320 100644 (file)
@@ -4,13 +4,8 @@
 
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 
-#include <algorithm>
-#include <deque>
-#include <iterator>
-
-#include "base/bind.h"
 #include "base/debug/trace_event.h"
-#include "components/keyed_service/content/browser_context_keyed_base_factory.h"
+#include "base/memory/singleton.h"
 #include "content/public/browser/browser_context.h"
 
 #ifndef NDEBUG
@@ -23,38 +18,10 @@ const char kDumpBrowserContextDependencyGraphFlag[] =
     "dump-browser-context-graph";
 #endif  // NDEBUG
 
-void BrowserContextDependencyManager::AddComponent(
-    BrowserContextKeyedBaseFactory* component) {
-  dependency_graph_.AddNode(component);
-}
-
-void BrowserContextDependencyManager::RemoveComponent(
-    BrowserContextKeyedBaseFactory* component) {
-  dependency_graph_.RemoveNode(component);
-}
-
-void BrowserContextDependencyManager::AddEdge(
-    BrowserContextKeyedBaseFactory* depended,
-    BrowserContextKeyedBaseFactory* dependee) {
-  dependency_graph_.AddEdge(depended, dependee);
-}
-
 void BrowserContextDependencyManager::RegisterProfilePrefsForServices(
     const content::BrowserContext* context,
     user_prefs::PrefRegistrySyncable* pref_registry) {
-  std::vector<DependencyNode*> construction_order;
-  if (!dependency_graph_.GetConstructionOrder(&construction_order)) {
-    NOTREACHED();
-  }
-
-  for (std::vector<DependencyNode*>::const_iterator it =
-           construction_order.begin();
-       it != construction_order.end();
-       ++it) {
-    BrowserContextKeyedBaseFactory* factory =
-        static_cast<BrowserContextKeyedBaseFactory*>(*it);
-    factory->RegisterProfilePrefsIfNecessaryForContext(context, pref_registry);
-  }
+  RegisterPrefsForServices(context, pref_registry);
 }
 
 void BrowserContextDependencyManager::CreateBrowserContextServices(
@@ -73,61 +40,13 @@ void BrowserContextDependencyManager::DoCreateBrowserContextServices(
   TRACE_EVENT0(
       "browser",
       "BrowserContextDependencyManager::DoCreateBrowserContextServices")
-#ifndef NDEBUG
-  MarkBrowserContextLiveForTesting(context);
-#endif
-
   will_create_browser_context_services_callbacks_.Notify(context);
-
-  std::vector<DependencyNode*> construction_order;
-  if (!dependency_graph_.GetConstructionOrder(&construction_order)) {
-    NOTREACHED();
-  }
-
-#ifndef NDEBUG
-  DumpBrowserContextDependencies(context);
-#endif
-
-  for (size_t i = 0; i < construction_order.size(); i++) {
-    BrowserContextKeyedBaseFactory* factory =
-        static_cast<BrowserContextKeyedBaseFactory*>(construction_order[i]);
-    if (is_testing_context && factory->ServiceIsNULLWhileTesting() &&
-        !factory->HasTestingFactory(context)) {
-      factory->SetEmptyTestingFactory(context);
-    } else if (factory->ServiceIsCreatedWithBrowserContext()) {
-      // Create the service.
-      factory->CreateServiceNow(context);
-    }
-  }
+  DependencyManager::CreateContextServices(context, is_testing_context);
 }
 
 void BrowserContextDependencyManager::DestroyBrowserContextServices(
     content::BrowserContext* context) {
-  std::vector<DependencyNode*> destruction_order;
-  if (!dependency_graph_.GetDestructionOrder(&destruction_order)) {
-    NOTREACHED();
-  }
-
-#ifndef NDEBUG
-  DumpBrowserContextDependencies(context);
-#endif
-
-  for (size_t i = 0; i < destruction_order.size(); i++) {
-    BrowserContextKeyedBaseFactory* factory =
-        static_cast<BrowserContextKeyedBaseFactory*>(destruction_order[i]);
-    factory->BrowserContextShutdown(context);
-  }
-
-#ifndef NDEBUG
-  // The context is now dead to the rest of the program.
-  dead_context_pointers_.insert(context);
-#endif
-
-  for (size_t i = 0; i < destruction_order.size(); i++) {
-    BrowserContextKeyedBaseFactory* factory =
-        static_cast<BrowserContextKeyedBaseFactory*>(destruction_order[i]);
-    factory->BrowserContextDestroyed(context);
-  }
+  DependencyManager::DestroyContextServices(context);
 }
 
 scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription>
@@ -140,20 +59,14 @@ RegisterWillCreateBrowserContextServicesCallbackForTesting(
 #ifndef NDEBUG
 void BrowserContextDependencyManager::AssertBrowserContextWasntDestroyed(
     content::BrowserContext* context) {
-  if (dead_context_pointers_.find(context) != dead_context_pointers_.end()) {
-    NOTREACHED() << "Attempted to access a BrowserContext that was ShutDown(). "
-                 << "This is most likely a heap smasher in progress. After "
-                 << "KeyedService::Shutdown() completes, your "
-                 << "service MUST NOT refer to depended BrowserContext "
-                 << "services again.";
-  }
+  DependencyManager::AssertContextWasntDestroyed(context);
 }
 
 void BrowserContextDependencyManager::MarkBrowserContextLiveForTesting(
     content::BrowserContext* context) {
-  dead_context_pointers_.erase(context);
+  DependencyManager::MarkContextLiveForTesting(context);
 }
-#endif
+#endif  // NDEBUG
 
 // static
 BrowserContextDependencyManager*
@@ -166,26 +79,17 @@ BrowserContextDependencyManager::BrowserContextDependencyManager() {}
 BrowserContextDependencyManager::~BrowserContextDependencyManager() {}
 
 #ifndef NDEBUG
-namespace {
-
-std::string BrowserContextKeyedBaseFactoryGetNodeName(DependencyNode* node) {
-  return static_cast<BrowserContextKeyedBaseFactory*>(node)->name();
-}
-
-}  // namespace
-
-void BrowserContextDependencyManager::DumpBrowserContextDependencies(
-    content::BrowserContext* context) {
+void BrowserContextDependencyManager::DumpContextDependencies(
+    const base::SupportsUserData* context) const {
   // Whenever we try to build a destruction ordering, we should also dump a
   // dependency graph to "/path/to/context/context-dependencies.dot".
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           kDumpBrowserContextDependencyGraphFlag)) {
     base::FilePath dot_file =
-        context->GetPath().AppendASCII("browser-context-dependencies.dot");
-    std::string contents = dependency_graph_.DumpAsGraphviz(
-        "BrowserContext",
-        base::Bind(&BrowserContextKeyedBaseFactoryGetNodeName));
-    base::WriteFile(dot_file, contents.c_str(), contents.size());
+        static_cast<const content::BrowserContext*>(context)
+            ->GetPath()
+            .AppendASCII("browser-context-dependencies.dot");
+    DumpDependenciesAsGraphviz("BrowserContext", dot_file);
   }
 }
 #endif  // NDEBUG