| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/keyed_service/content/browser_context_dependency_manager.h" |
| |
| #include "base/bind.h" |
| #include "base/debug/trace_event.h" |
| #include "base/memory/singleton.h" |
| #include "components/keyed_service/content/browser_context_keyed_base_factory.h" |
| #include "content/public/browser/browser_context.h" |
| |
| #ifndef NDEBUG |
| #include "base/command_line.h" |
| #include "base/files/file_util.h" |
| |
| // Dumps dependency information about our browser context keyed services |
| // into a dot file in the browser context directory. |
| const char kDumpBrowserContextDependencyGraphFlag[] = |
| "dump-browser-context-graph"; |
| #endif // NDEBUG |
| |
| void BrowserContextDependencyManager::RegisterProfilePrefsForServices( |
| const content::BrowserContext* context, |
| user_prefs::PrefRegistrySyncable* pref_registry) { |
| RegisterPrefsForServices(context, pref_registry); |
| } |
| |
| void BrowserContextDependencyManager::CreateBrowserContextServices( |
| content::BrowserContext* context) { |
| DoCreateBrowserContextServices(context, false); |
| } |
| |
| void BrowserContextDependencyManager::CreateBrowserContextServicesForTest( |
| content::BrowserContext* context) { |
| DoCreateBrowserContextServices(context, true); |
| } |
| |
| void BrowserContextDependencyManager::DoCreateBrowserContextServices( |
| content::BrowserContext* context, |
| bool is_testing_context) { |
| TRACE_EVENT0( |
| "browser", |
| "BrowserContextDependencyManager::DoCreateBrowserContextServices") |
| will_create_browser_context_services_callbacks_.Notify(context); |
| DependencyManager::CreateContextServices(context, is_testing_context); |
| } |
| |
| void BrowserContextDependencyManager::DestroyBrowserContextServices( |
| content::BrowserContext* context) { |
| DependencyManager::DestroyContextServices(context); |
| } |
| |
| scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription> |
| BrowserContextDependencyManager:: |
| RegisterWillCreateBrowserContextServicesCallbackForTesting( |
| const base::Callback<void(content::BrowserContext*)>& callback) { |
| return will_create_browser_context_services_callbacks_.Add(callback); |
| } |
| |
| #ifndef NDEBUG |
| void BrowserContextDependencyManager::AssertBrowserContextWasntDestroyed( |
| content::BrowserContext* context) { |
| DependencyManager::AssertContextWasntDestroyed(context); |
| } |
| |
| void BrowserContextDependencyManager::MarkBrowserContextLiveForTesting( |
| content::BrowserContext* context) { |
| DependencyManager::MarkContextLiveForTesting(context); |
| } |
| #endif // NDEBUG |
| |
| // static |
| BrowserContextDependencyManager* |
| BrowserContextDependencyManager::GetInstance() { |
| return Singleton<BrowserContextDependencyManager>::get(); |
| } |
| |
| BrowserContextDependencyManager::BrowserContextDependencyManager() {} |
| |
| BrowserContextDependencyManager::~BrowserContextDependencyManager() {} |
| |
| #ifndef NDEBUG |
| 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 = |
| static_cast<const content::BrowserContext*>(context) |
| ->GetPath() |
| .AppendASCII("browser-context-dependencies.dot"); |
| DumpDependenciesAsGraphviz("BrowserContext", dot_file); |
| } |
| } |
| #endif // NDEBUG |