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