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