profile_policy_connector_factory.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/policy/profile_policy_connector_factory.h" 6 7#include "base/logging.h" 8#include "base/memory/singleton.h" 9#include "chrome/browser/policy/profile_policy_connector.h" 10#include "chrome/browser/profiles/profile.h" 11#include "components/keyed_service/content/browser_context_dependency_manager.h" 12 13#if defined(ENABLE_CONFIGURATION_POLICY) 14#include "chrome/browser/policy/schema_registry_service.h" 15#include "chrome/browser/policy/schema_registry_service_factory.h" 16#if defined(OS_CHROMEOS) 17#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 18#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 19#include "chrome/browser/chromeos/profiles/profile_helper.h" 20#include "components/user_manager/user.h" 21#else 22#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 23#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 24#endif 25#endif 26 27namespace policy { 28 29// static 30ProfilePolicyConnectorFactory* ProfilePolicyConnectorFactory::GetInstance() { 31 return Singleton<ProfilePolicyConnectorFactory>::get(); 32} 33 34// static 35ProfilePolicyConnector* ProfilePolicyConnectorFactory::GetForProfile( 36 Profile* profile) { 37 return GetInstance()->GetForProfileInternal(profile); 38} 39 40// static 41scoped_ptr<ProfilePolicyConnector> 42ProfilePolicyConnectorFactory::CreateForProfile(Profile* profile, 43 bool force_immediate_load) { 44 return GetInstance()->CreateForProfileInternal(profile, force_immediate_load); 45} 46 47void ProfilePolicyConnectorFactory::SetServiceForTesting( 48 Profile* profile, 49 ProfilePolicyConnector* connector) { 50 ProfilePolicyConnector*& map_entry = connectors_[profile]; 51 CHECK(!map_entry); 52 map_entry = connector; 53} 54 55ProfilePolicyConnectorFactory::ProfilePolicyConnectorFactory() 56 : BrowserContextKeyedBaseFactory( 57 "ProfilePolicyConnector", 58 BrowserContextDependencyManager::GetInstance()) { 59#if defined(ENABLE_CONFIGURATION_POLICY) 60 DependsOn(SchemaRegistryServiceFactory::GetInstance()); 61#if defined(OS_CHROMEOS) 62 DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 63#else 64 DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 65#endif 66#endif 67} 68 69ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() { 70 DCHECK(connectors_.empty()); 71} 72 73ProfilePolicyConnector* 74 ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) { 75 // Get the connector for the original Profile, so that the incognito Profile 76 // gets managed settings from the same PolicyService. 77 ConnectorMap::const_iterator it = 78 connectors_.find(profile->GetOriginalProfile()); 79 CHECK(it != connectors_.end()); 80 return it->second; 81} 82 83scoped_ptr<ProfilePolicyConnector> 84ProfilePolicyConnectorFactory::CreateForProfileInternal( 85 Profile* profile, 86 bool force_immediate_load) { 87 DCHECK(connectors_.find(profile) == connectors_.end()); 88 89 SchemaRegistry* schema_registry = NULL; 90 CloudPolicyManager* user_cloud_policy_manager = NULL; 91 92#if defined(ENABLE_CONFIGURATION_POLICY) 93 schema_registry = 94 SchemaRegistryServiceFactory::GetForContext(profile)->registry(); 95 96#if defined(OS_CHROMEOS) 97 user_manager::User* user = NULL; 98 if (!chromeos::ProfileHelper::IsSigninProfile(profile)) { 99 user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); 100 CHECK(user); 101 } 102 user_cloud_policy_manager = 103 UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile); 104#else 105 user_cloud_policy_manager = 106 UserCloudPolicyManagerFactory::GetForBrowserContext(profile); 107#endif // defined(OS_CHROMEOS) 108#endif // defined(ENABLE_CONFIGURATION_POLICY) 109 110 ProfilePolicyConnector* connector = new ProfilePolicyConnector(); 111 connector->Init(force_immediate_load, 112#if defined(ENABLE_CONFIGURATION_POLICY) && defined(OS_CHROMEOS) 113 user, 114#endif 115 schema_registry, 116 user_cloud_policy_manager); 117 connectors_[profile] = connector; 118 return make_scoped_ptr(connector); 119} 120 121void ProfilePolicyConnectorFactory::BrowserContextShutdown( 122 content::BrowserContext* context) { 123 Profile* profile = static_cast<Profile*>(context); 124 if (profile->IsOffTheRecord()) 125 return; 126 ConnectorMap::iterator it = connectors_.find(profile); 127 if (it != connectors_.end()) 128 it->second->Shutdown(); 129} 130 131void ProfilePolicyConnectorFactory::BrowserContextDestroyed( 132 content::BrowserContext* context) { 133 ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context)); 134 if (it != connectors_.end()) 135 connectors_.erase(it); 136 BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context); 137} 138 139void ProfilePolicyConnectorFactory::SetEmptyTestingFactory( 140 content::BrowserContext* context) {} 141 142bool ProfilePolicyConnectorFactory::HasTestingFactory( 143 content::BrowserContext* context) { 144 return false; 145} 146 147void ProfilePolicyConnectorFactory::CreateServiceNow( 148 content::BrowserContext* context) {} 149 150} // namespace policy 151