user_cloud_policy_manager_factory.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
1// Copyright (c) 2012 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/cloud/user_cloud_policy_manager_factory.h"
6
7#include "base/command_line.h"
8#include "base/logging.h"
9#include "base/message_loop/message_loop_proxy.h"
10#include "chrome/browser/policy/cloud/cloud_external_data_manager.h"
11#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
12#include "chrome/browser/policy/cloud/user_cloud_policy_store.h"
13#include "chrome/browser/profiles/profile.h"
14#include "chrome/common/chrome_switches.h"
15#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
16
17namespace policy {
18
19// static
20UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() {
21  return Singleton<UserCloudPolicyManagerFactory>::get();
22}
23
24// static
25UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForProfile(
26    Profile* profile) {
27  return GetInstance()->GetManagerForProfile(profile);
28}
29
30// static
31scoped_ptr<UserCloudPolicyManager>
32    UserCloudPolicyManagerFactory::CreateForProfile(Profile* profile,
33                                                    bool force_immediate_load) {
34  return GetInstance()->CreateManagerForProfile(profile, force_immediate_load);
35}
36
37UserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory()
38    : BrowserContextKeyedBaseFactory(
39        "UserCloudPolicyManager",
40        BrowserContextDependencyManager::GetInstance()) {}
41
42UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() {}
43
44UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetManagerForProfile(
45    Profile* profile) {
46  // Get the manager for the original profile, since the PolicyService is
47  // also shared between the incognito Profile and the original Profile.
48  ManagerMap::const_iterator it = managers_.find(profile->GetOriginalProfile());
49  return it != managers_.end() ? it->second : NULL;
50}
51
52scoped_ptr<UserCloudPolicyManager>
53    UserCloudPolicyManagerFactory::CreateManagerForProfile(
54        Profile* profile,
55        bool force_immediate_load) {
56  if (CommandLine::ForCurrentProcess()->HasSwitch(
57          switches::kDisableCloudPolicyOnSignin)) {
58    return scoped_ptr<UserCloudPolicyManager>();
59  }
60  scoped_ptr<UserCloudPolicyStore> store(UserCloudPolicyStore::Create(profile));
61  if (force_immediate_load)
62    store->LoadImmediately();
63  scoped_ptr<UserCloudPolicyManager> manager(
64      new UserCloudPolicyManager(profile,
65                                 store.Pass(),
66                                 scoped_ptr<CloudExternalDataManager>(),
67                                 base::MessageLoopProxy::current()));
68  manager->Init();
69  return manager.Pass();
70}
71
72void UserCloudPolicyManagerFactory::BrowserContextShutdown(
73    content::BrowserContext* context) {
74  Profile* profile = static_cast<Profile*>(context);
75  if (profile->IsOffTheRecord())
76    return;
77  UserCloudPolicyManager* manager = GetManagerForProfile(profile);
78  if (manager)
79    manager->Shutdown();
80}
81
82void UserCloudPolicyManagerFactory::SetEmptyTestingFactory(
83    content::BrowserContext* profile) {
84}
85
86void UserCloudPolicyManagerFactory::CreateServiceNow(
87    content::BrowserContext* profile) {
88}
89
90void UserCloudPolicyManagerFactory::Register(Profile* profile,
91                                             UserCloudPolicyManager* instance) {
92  UserCloudPolicyManager*& entry = managers_[profile];
93  DCHECK(!entry);
94  entry = instance;
95}
96
97void UserCloudPolicyManagerFactory::Unregister(
98    Profile* profile,
99    UserCloudPolicyManager* instance) {
100  ManagerMap::iterator entry = managers_.find(profile);
101  if (entry != managers_.end()) {
102    DCHECK_EQ(instance, entry->second);
103    managers_.erase(entry);
104  } else {
105    NOTREACHED();
106  }
107}
108
109}  // namespace policy
110