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

Unified Diff: chrome/browser/policy/schema_registry_service_factory.cc

Issue 342233005: Move ownership of the ComponentCloudPolicyService to the broker. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix clang build Created 6 years, 6 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: chrome/browser/policy/schema_registry_service_factory.cc
diff --git a/chrome/browser/policy/schema_registry_service_factory.cc b/chrome/browser/policy/schema_registry_service_factory.cc
index 71758ffc9076cbb1247912cd29ca8f1166599b20..1bdd9c7fbd70a7e5f4b80285b516ead10d79ebc8 100644
--- a/chrome/browser/policy/schema_registry_service_factory.cc
+++ b/chrome/browser/policy/schema_registry_service_factory.cc
@@ -5,14 +5,49 @@
#include "chrome/browser/policy/schema_registry_service_factory.h"
#include "base/logging.h"
+#include "base/macros.h"
bartfab (slow) 2014/06/20 09:44:23 Nit: Move this to the header, which uses DISALLOW_
Joao da Silva 2014/06/20 15:36:08 Done.
#include "chrome/browser/policy/schema_registry_service.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/policy/core/common/schema.h"
#include "components/policy/core/common/schema_registry.h"
#include "content/public/browser/browser_context.h"
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/login/users/user.h"
+#include "chrome/browser/chromeos/login/users/user_manager.h"
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/profiles/profile.h"
+#endif
+
namespace policy {
+#if defined(OS_CHROMEOS)
+namespace {
+
+DeviceLocalAccountPolicyBroker* GetBroker(content::BrowserContext* context) {
+ Profile* profile = Profile::FromBrowserContext(context);
+
+ if (chromeos::ProfileHelper::IsSigninProfile(profile))
+ return NULL;
+
+ chromeos::UserManager* user_manager = chromeos::UserManager::Get();
+ chromeos::User* user = user_manager->GetUserByProfile(profile);
+ if (!user)
+ return NULL;
+
+ BrowserPolicyConnectorChromeOS* connector =
+ g_browser_process->platform_part()->browser_policy_connector_chromeos();
bartfab (slow) 2014/06/20 09:44:23 Nit: #include "chrome/browser/browser_process_plat
Joao da Silva 2014/06/20 15:36:08 Done.
+ DeviceLocalAccountPolicyService* service =
+ connector->GetDeviceLocalAccountPolicyService();
+ return service->GetBrokerForUser(user->email());
+}
+
+} // namespace
+#endif // OS_CHROMEOS
+
// static
SchemaRegistryServiceFactory* SchemaRegistryServiceFactory::GetInstance() {
return Singleton<SchemaRegistryServiceFactory>::get();
@@ -60,10 +95,24 @@ SchemaRegistryServiceFactory::CreateForContextInternal(
CombinedSchemaRegistry* global_registry) {
DCHECK(!context->IsOffTheRecord());
DCHECK(registries_.find(context) == registries_.end());
- SchemaRegistryService* registry =
- new SchemaRegistryService(chrome_schema, global_registry);
- registries_[context] = registry;
- return make_scoped_ptr(registry);
+
+ scoped_ptr<SchemaRegistryService> registry;
+
+#if defined(OS_CHROMEOS)
+ DeviceLocalAccountPolicyBroker* broker = GetBroker(context);
+ if (broker) {
+ // The DeviceLocalAccountPolicyBroker creates a SchemaRegistryService for
+ // device local accounts earlier, so that the external data can be preloaded
bartfab (slow) 2014/06/20 09:44:23 Nit: s/device local/device-local/
Joao da Silva 2014/06/20 15:36:08 Done.
+ // before the session is started. Transfer its ownership now.
+ registry = broker->release_schema_registry();
+ }
+#endif
+
+ if (!registry)
+ registry.reset(new SchemaRegistryService(chrome_schema, global_registry));
+
+ registries_[context] = registry.get();
+ return registry.Pass();
}
void SchemaRegistryServiceFactory::BrowserContextShutdown(
@@ -71,10 +120,19 @@ void SchemaRegistryServiceFactory::BrowserContextShutdown(
if (context->IsOffTheRecord())
return;
RegistryMap::iterator it = registries_.find(context);
- if (it != registries_.end())
+ if (it != registries_.end()) {
+#if defined(OS_CHROMEOS)
+ DeviceLocalAccountPolicyBroker* broker = GetBroker(context);
+ if (broker) {
+ // Give the broker a notification to clean up any observers of the
+ // SchemaRegistryService.
+ broker->OnSchemaRegistryShutdown();
+ }
+#endif
it->second->Shutdown();
- else
+ } else {
NOTREACHED();
+ }
}
void SchemaRegistryServiceFactory::BrowserContextDestroyed(

Powered by Google App Engine
This is Rietveld 408576698