profile_policy_connector_factory.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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 "chrome/browser/policy/profile_policy_connector.h" 9#include "chrome/browser/profiles/profile.h" 10#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 11 12#if defined(ENABLE_CONFIGURATION_POLICY) 13#if defined(OS_CHROMEOS) 14#include "chrome/browser/chromeos/login/user_manager.h" 15#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 16#include "chrome/common/pref_names.h" 17#include "components/user_prefs/pref_registry_syncable.h" 18#else 19#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 20#endif 21#endif 22 23namespace policy { 24 25// static 26ProfilePolicyConnectorFactory* ProfilePolicyConnectorFactory::GetInstance() { 27 return Singleton<ProfilePolicyConnectorFactory>::get(); 28} 29 30// static 31ProfilePolicyConnector* ProfilePolicyConnectorFactory::GetForProfile( 32 Profile* profile) { 33 return GetInstance()->GetForProfileInternal(profile); 34} 35 36// static 37scoped_ptr<ProfilePolicyConnector> 38 ProfilePolicyConnectorFactory::CreateForProfile( 39 Profile* profile, 40 bool force_immediate_load, 41 base::SequencedTaskRunner* sequenced_task_runner) { 42 return GetInstance()->CreateForProfileInternal( 43 profile, force_immediate_load, sequenced_task_runner); 44} 45 46void ProfilePolicyConnectorFactory::SetServiceForTesting( 47 Profile* profile, 48 ProfilePolicyConnector* connector) { 49 ProfilePolicyConnector*& map_entry = connectors_[profile]; 50 CHECK(!map_entry); 51 map_entry = connector; 52} 53 54ProfilePolicyConnectorFactory::ProfilePolicyConnectorFactory() 55 : BrowserContextKeyedBaseFactory( 56 "ProfilePolicyConnector", 57 BrowserContextDependencyManager::GetInstance()) { 58#if defined(ENABLE_CONFIGURATION_POLICY) 59#if defined(OS_CHROMEOS) 60 DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 61#else 62 DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 63#endif 64#endif 65} 66 67ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() { 68 DCHECK(connectors_.empty()); 69} 70 71ProfilePolicyConnector* 72 ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) { 73 // Get the connector for the original Profile, so that the incognito Profile 74 // gets managed settings from the same PolicyService. 75 ConnectorMap::const_iterator it = 76 connectors_.find(profile->GetOriginalProfile()); 77 CHECK(it != connectors_.end()); 78 return it->second; 79} 80 81scoped_ptr<ProfilePolicyConnector> 82 ProfilePolicyConnectorFactory::CreateForProfileInternal( 83 Profile* profile, 84 bool force_immediate_load, 85 base::SequencedTaskRunner* sequenced_task_runner) { 86 DCHECK(connectors_.find(profile) == connectors_.end()); 87 ProfilePolicyConnector* connector = new ProfilePolicyConnector(profile); 88 connector->Init(force_immediate_load, sequenced_task_runner); 89 connectors_[profile] = connector; 90 return scoped_ptr<ProfilePolicyConnector>(connector); 91} 92 93void ProfilePolicyConnectorFactory::BrowserContextShutdown( 94 content::BrowserContext* context) { 95 Profile* profile = static_cast<Profile*>(context); 96 if (profile->IsOffTheRecord()) 97 return; 98 ConnectorMap::iterator it = connectors_.find(profile); 99 if (it != connectors_.end()) 100 it->second->Shutdown(); 101} 102 103void ProfilePolicyConnectorFactory::BrowserContextDestroyed( 104 content::BrowserContext* context) { 105 ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context)); 106 if (it != connectors_.end()) 107 connectors_.erase(it); 108 BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context); 109} 110 111void ProfilePolicyConnectorFactory::RegisterProfilePrefs( 112 user_prefs::PrefRegistrySyncable* registry) { 113#if defined(OS_CHROMEOS) 114 registry->RegisterBooleanPref( 115 prefs::kUsedPolicyCertificatesOnce, 116 false, 117 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 118#endif 119} 120 121void ProfilePolicyConnectorFactory::SetEmptyTestingFactory( 122 content::BrowserContext* context) {} 123 124void ProfilePolicyConnectorFactory::CreateServiceNow( 125 content::BrowserContext* context) {} 126 127} // namespace policy 128