This source file includes following definitions.
- GetInstance
- GetForProfile
- CreateForProfile
- SetServiceForTesting
- GetForProfileInternal
- CreateForProfileInternal
- BrowserContextShutdown
- BrowserContextDestroyed
- RegisterProfilePrefs
- SetEmptyTestingFactory
- CreateServiceNow
#include "chrome/browser/policy/profile_policy_connector_factory.h"
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/user_prefs/pref_registry_syncable.h"
#if defined(ENABLE_CONFIGURATION_POLICY)
#include "chrome/browser/policy/schema_registry_service.h"
#include "chrome/browser/policy/schema_registry_service_factory.h"
#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/login/user.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#else
#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
#include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
#endif
#endif
namespace policy {
ProfilePolicyConnectorFactory* ProfilePolicyConnectorFactory::GetInstance() {
return Singleton<ProfilePolicyConnectorFactory>::get();
}
ProfilePolicyConnector* ProfilePolicyConnectorFactory::GetForProfile(
Profile* profile) {
return GetInstance()->GetForProfileInternal(profile);
}
scoped_ptr<ProfilePolicyConnector>
ProfilePolicyConnectorFactory::CreateForProfile(Profile* profile,
bool force_immediate_load) {
return GetInstance()->CreateForProfileInternal(profile, force_immediate_load);
}
void ProfilePolicyConnectorFactory::SetServiceForTesting(
Profile* profile,
ProfilePolicyConnector* connector) {
ProfilePolicyConnector*& map_entry = connectors_[profile];
CHECK(!map_entry);
map_entry = connector;
}
ProfilePolicyConnectorFactory::ProfilePolicyConnectorFactory()
: BrowserContextKeyedBaseFactory(
"ProfilePolicyConnector",
BrowserContextDependencyManager::GetInstance()) {
#if defined(ENABLE_CONFIGURATION_POLICY)
DependsOn(SchemaRegistryServiceFactory::GetInstance());
#if defined(OS_CHROMEOS)
DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance());
#else
DependsOn(UserCloudPolicyManagerFactory::GetInstance());
#endif
#endif
}
ProfilePolicyConnectorFactory::~ProfilePolicyConnectorFactory() {
DCHECK(connectors_.empty());
}
ProfilePolicyConnector*
ProfilePolicyConnectorFactory::GetForProfileInternal(Profile* profile) {
ConnectorMap::const_iterator it =
connectors_.find(profile->GetOriginalProfile());
CHECK(it != connectors_.end());
return it->second;
}
scoped_ptr<ProfilePolicyConnector>
ProfilePolicyConnectorFactory::CreateForProfileInternal(
Profile* profile,
bool force_immediate_load) {
DCHECK(connectors_.find(profile) == connectors_.end());
SchemaRegistry* schema_registry = NULL;
CloudPolicyManager* user_cloud_policy_manager = NULL;
#if defined(ENABLE_CONFIGURATION_POLICY)
schema_registry = SchemaRegistryServiceFactory::GetForContext(profile);
#if defined(OS_CHROMEOS)
chromeos::User* user = NULL;
if (!chromeos::ProfileHelper::IsSigninProfile(profile)) {
chromeos::UserManager* user_manager = chromeos::UserManager::Get();
user = user_manager->GetUserByProfile(profile);
CHECK(user);
}
user_cloud_policy_manager =
UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile);
#else
user_cloud_policy_manager =
UserCloudPolicyManagerFactory::GetForBrowserContext(profile);
#endif
#endif
ProfilePolicyConnector* connector = new ProfilePolicyConnector();
connector->Init(force_immediate_load,
#if defined(ENABLE_CONFIGURATION_POLICY) && defined(OS_CHROMEOS)
user,
#endif
schema_registry,
user_cloud_policy_manager);
connectors_[profile] = connector;
return make_scoped_ptr(connector);
}
void ProfilePolicyConnectorFactory::BrowserContextShutdown(
content::BrowserContext* context) {
Profile* profile = static_cast<Profile*>(context);
if (profile->IsOffTheRecord())
return;
ConnectorMap::iterator it = connectors_.find(profile);
if (it != connectors_.end())
it->second->Shutdown();
}
void ProfilePolicyConnectorFactory::BrowserContextDestroyed(
content::BrowserContext* context) {
ConnectorMap::iterator it = connectors_.find(static_cast<Profile*>(context));
if (it != connectors_.end())
connectors_.erase(it);
BrowserContextKeyedBaseFactory::BrowserContextDestroyed(context);
}
void ProfilePolicyConnectorFactory::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
#if defined(OS_ANDROID) || defined(OS_IOS)
registry->RegisterListPref(
prefs::kManagedBookmarks,
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
#endif
}
void ProfilePolicyConnectorFactory::SetEmptyTestingFactory(
content::BrowserContext* context) {}
void ProfilePolicyConnectorFactory::CreateServiceNow(
content::BrowserContext* context) {}
}