profile_policy_connector_factory.cc revision f2477e01787aa58f445919b809d89e252beef54f
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" 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "chrome/common/pref_names.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "components/user_prefs/pref_registry_syncable.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service_factory.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/login/user.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace policy { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory* ProfilePolicyConnectorFactory::GetInstance() { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Singleton<ProfilePolicyConnectorFactory>::get(); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnector* ProfilePolicyConnectorFactory::GetForProfile( 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile) { 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetInstance()->GetForProfileInternal(profile); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<ProfilePolicyConnector> 450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ProfilePolicyConnectorFactory::CreateForProfile(Profile* profile, 460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool force_immediate_load) { 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GetInstance()->CreateForProfileInternal(profile, force_immediate_load); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::SetServiceForTesting( 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnector* connector) { 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnector*& map_entry = connectors_[profile]; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(!map_entry); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) map_entry = connector; 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory::ProfilePolicyConnectorFactory() 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "ProfilePolicyConnector", 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(SchemaRegistryServiceFactory::GetInstance()); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() { 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(connectors_.empty()); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ProfilePolicyConnector* 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the connector for the original Profile, so that the incognito Profile 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // gets managed settings from the same PolicyService. 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::const_iterator it = 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_.find(profile->GetOriginalProfile()); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(it != connectors_.end()); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return it->second; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<ProfilePolicyConnector> 870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ProfilePolicyConnectorFactory::CreateForProfileInternal( 880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile* profile, 890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool force_immediate_load) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(connectors_.find(profile) == connectors_.end()); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SchemaRegistry* schema_registry = NULL; 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CloudPolicyManager* user_cloud_policy_manager = NULL; 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) schema_registry = SchemaRegistryServiceFactory::GetForContext(profile); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chromeos::User* user = NULL; 1000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!chromeos::ProfileHelper::IsSigninProfile(profile)) { 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chromeos::UserManager* user_manager = chromeos::UserManager::Get(); 1020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) user = user_manager->GetUserByProfile(profile); 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CHECK(user); 1040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_cloud_policy_manager = 1060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile); 1070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#else 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_cloud_policy_manager = 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManagerFactory::GetForBrowserContext(profile); 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // defined(ENABLE_CONFIGURATION_POLICY) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfilePolicyConnector* connector = new ProfilePolicyConnector(); 1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) connector->Init(force_immediate_load, 1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY) && defined(OS_CHROMEOS) 1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) user, 1170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) schema_registry, 1190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) user_cloud_policy_manager); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_[profile] = connector; 1210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return make_scoped_ptr(connector); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ProfilePolicyConnectorFactory::BrowserContextShutdown( 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (profile->IsOffTheRecord()) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::iterator it = connectors_.find(profile); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (it != connectors_.end()) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it->second->Shutdown(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ProfilePolicyConnectorFactory::BrowserContextDestroyed( 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context)); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (it != connectors_.end()) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) connectors_.erase(it); 13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ProfilePolicyConnectorFactory::RegisterProfilePrefs( 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 144d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#if defined(OS_ANDROID) 145d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch registry->RegisterListPref( 146d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch prefs::kManagedBookmarks, 147d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 148d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::SetEmptyTestingFactory( 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ProfilePolicyConnectorFactory::CreateServiceNow( 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) {} 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace policy 158