1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector_factory.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h" 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/memory/singleton.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/policy/core/common/policy_service.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service_factory.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/policy/core/common/policy_service_impl.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace policy { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory* ProfilePolicyConnectorFactory::GetInstance() { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Singleton<ProfilePolicyConnectorFactory>::get(); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnector* ProfilePolicyConnectorFactory::GetForProfile( 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile) { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetInstance()->GetForProfileInternal(profile); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<ProfilePolicyConnector> 440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ProfilePolicyConnectorFactory::CreateForProfile(Profile* profile, 450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool force_immediate_load) { 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GetInstance()->CreateForProfileInternal(profile, force_immediate_load); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::SetServiceForTesting( 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnector* connector) { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnector*& map_entry = connectors_[profile]; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(!map_entry); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) map_entry = connector; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_CONFIGURATION_POLICY) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ProfilePolicyConnectorFactory::PushProviderForTesting( 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConfigurationPolicyProvider* provider) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_providers_.push_back(provider); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory::ProfilePolicyConnectorFactory() 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "ProfilePolicyConnector", 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(SchemaRegistryServiceFactory::GetInstance()); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() { 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(connectors_.empty()); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnector* 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) { 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the connector for the original Profile, so that the incognito Profile 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // gets managed settings from the same PolicyService. 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::const_iterator it = 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_.find(profile->GetOriginalProfile()); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(it != connectors_.end()); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return it->second; 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<ProfilePolicyConnector> 930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ProfilePolicyConnectorFactory::CreateForProfileInternal( 940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile* profile, 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool force_immediate_load) { 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(connectors_.find(profile) == connectors_.end()); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SchemaRegistry* schema_registry = NULL; 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CloudPolicyManager* user_cloud_policy_manager = NULL; 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 1026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) schema_registry = 1036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SchemaRegistryServiceFactory::GetForContext(profile)->registry(); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::User* user = NULL; 1070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!chromeos::ProfileHelper::IsSigninProfile(profile)) { 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); 1090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CHECK(user); 1100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_cloud_policy_manager = 1120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile); 1130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#else 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_cloud_policy_manager = 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManagerFactory::GetForBrowserContext(profile); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfilePolicyConnector* connector = new ProfilePolicyConnector(); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_CONFIGURATION_POLICY) 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (test_providers_.empty()) { 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connector->Init(force_immediate_load, 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user, 1260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci schema_registry, 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci user_cloud_policy_manager); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PolicyServiceImpl::Providers providers; 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci providers.push_back(test_providers_.front()); 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_providers_.pop_front(); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<PolicyService> service(new PolicyServiceImpl(providers)); 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connector->InitForTesting(service.Pass()); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connector->Init(false, NULL, NULL); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_[profile] = connector; 1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return make_scoped_ptr(connector); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ProfilePolicyConnectorFactory::BrowserContextShutdown( 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (profile->IsOffTheRecord()) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::iterator it = connectors_.find(profile); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (it != connectors_.end()) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it->second->Shutdown(); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ProfilePolicyConnectorFactory::BrowserContextDestroyed( 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context)); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (it != connectors_.end()) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_.erase(it); 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::SetEmptyTestingFactory( 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ProfilePolicyConnectorFactory::HasTestingFactory( 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* context) { 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::CreateServiceNow( 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace policy 174