profile_policy_connector_factory.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 "chrome/browser/profiles/profile_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 : ProfileKeyedBaseFactory("ProfilePolicyConnector", 56 ProfileDependencyManager::GetInstance()) { 57#if defined(ENABLE_CONFIGURATION_POLICY) 58#if defined(OS_CHROMEOS) 59 DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 60#else 61 DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 62#endif 63#endif 64} 65 66ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() { 67 DCHECK(connectors_.empty()); 68} 69 70ProfilePolicyConnector* 71 ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) { 72 // Get the connector for the original Profile, so that the incognito Profile 73 // gets managed settings from the same PolicyService. 74 ConnectorMap::const_iterator it = 75 connectors_.find(profile->GetOriginalProfile()); 76 CHECK(it != connectors_.end()); 77 return it->second; 78} 79 80scoped_ptr<ProfilePolicyConnector> 81 ProfilePolicyConnectorFactory::CreateForProfileInternal( 82 Profile* profile, 83 bool force_immediate_load, 84 base::SequencedTaskRunner* sequenced_task_runner) { 85 DCHECK(connectors_.find(profile) == connectors_.end()); 86 ProfilePolicyConnector* connector = new ProfilePolicyConnector(profile); 87 connector->Init(force_immediate_load, sequenced_task_runner); 88 connectors_[profile] = connector; 89 return scoped_ptr<ProfilePolicyConnector>(connector); 90} 91 92void ProfilePolicyConnectorFactory::ProfileShutdown( 93 content::BrowserContext* context) { 94 Profile* profile = static_cast<Profile*>(context); 95 if (profile->IsOffTheRecord()) 96 return; 97 ConnectorMap::iterator it = connectors_.find(profile); 98 if (it != connectors_.end()) 99 it->second->Shutdown(); 100} 101 102void ProfilePolicyConnectorFactory::ProfileDestroyed( 103 content::BrowserContext* context) { 104 ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context)); 105 if (it != connectors_.end()) 106 connectors_.erase(it); 107 ProfileKeyedBaseFactory::ProfileDestroyed(context); 108} 109 110void ProfilePolicyConnectorFactory::RegisterUserPrefs( 111 user_prefs::PrefRegistrySyncable* registry) { 112#if defined(OS_CHROMEOS) 113 registry->RegisterBooleanPref( 114 prefs::kUsedPolicyCertificatesOnce, 115 false, 116 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 117#endif 118} 119 120void ProfilePolicyConnectorFactory::SetEmptyTestingFactory( 121 content::BrowserContext* context) {} 122 123void ProfilePolicyConnectorFactory::CreateServiceNow( 124 content::BrowserContext* context) {} 125 126} // namespace policy 127