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