user_cloud_policy_manager_factory.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/logging.h"
8#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
9#include "chrome/browser/policy/cloud/user_cloud_policy_store.h"
10#include "chrome/browser/profiles/profile_dependency_manager.h"
11
12namespace policy {
13
14// static
15UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() {
16  return Singleton<UserCloudPolicyManagerFactory>::get();
17}
18
19// static
20UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForProfile(
21    Profile* profile) {
22  return GetInstance()->GetManagerForProfile(profile);
23}
24
25// static
26scoped_ptr<UserCloudPolicyManager>
27    UserCloudPolicyManagerFactory::CreateForProfile(Profile* profile,
28                                                    bool force_immediate_load) {
29  return GetInstance()->CreateManagerForProfile(profile, force_immediate_load);
30}
31
32UserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory()
33    : ProfileKeyedBaseFactory("UserCloudPolicyManager",
34                              ProfileDependencyManager::GetInstance()) {}
35
36UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() {}
37
38UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetManagerForProfile(
39    Profile* profile) {
40  ManagerMap::const_iterator it = managers_.find(profile);
41  return it != managers_.end() ? it->second : NULL;
42}
43
44scoped_ptr<UserCloudPolicyManager>
45    UserCloudPolicyManagerFactory::CreateManagerForProfile(
46        Profile* profile,
47        bool force_immediate_load) {
48  scoped_ptr<policy::UserCloudPolicyStore> store(
49      policy::UserCloudPolicyStore::Create(profile));
50  if (force_immediate_load)
51    store->LoadImmediately();
52  return make_scoped_ptr(
53      new policy::UserCloudPolicyManager(profile, store.Pass()));
54}
55
56void UserCloudPolicyManagerFactory::ProfileShutdown(Profile* profile) {
57  UserCloudPolicyManager* manager = GetManagerForProfile(profile);
58  if (manager)
59    manager->Shutdown();
60}
61
62void UserCloudPolicyManagerFactory::SetEmptyTestingFactory(Profile* profile) {}
63
64void UserCloudPolicyManagerFactory::CreateServiceNow(Profile* profile) {}
65
66void UserCloudPolicyManagerFactory::Register(Profile* profile,
67                                             UserCloudPolicyManager* instance) {
68  UserCloudPolicyManager*& entry = managers_[profile];
69  DCHECK(!entry);
70  entry = instance;
71}
72
73void UserCloudPolicyManagerFactory::Unregister(
74    Profile* profile,
75    UserCloudPolicyManager* instance) {
76  ManagerMap::iterator entry = managers_.find(profile);
77  if (entry != managers_.end()) {
78    DCHECK_EQ(instance, entry->second);
79    managers_.erase(entry);
80  } else {
81    NOTREACHED();
82  }
83}
84
85}  // namespace policy
86