user_cloud_policy_manager_factory.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// found in the LICENSE file.
4b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/command_line.h"
8b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/logging.h"
9b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_store.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace policy {
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static
18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() {
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return Singleton<UserCloudPolicyManagerFactory>::get();
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// static
23b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForProfile(
24b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    Profile* profile) {
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  return GetInstance()->GetManagerForProfile(profile);
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// static
29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager>
30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    UserCloudPolicyManagerFactory::CreateForProfile(Profile* profile,
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                                    bool force_immediate_load) {
32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return GetInstance()->CreateManagerForProfile(profile, force_immediate_load);
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
35a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochUserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory()
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    : BrowserContextKeyedBaseFactory(
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        "UserCloudPolicyManager",
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {}
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
40b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() {}
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochUserCloudPolicyManager* UserCloudPolicyManagerFactory::GetManagerForProfile(
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    Profile* profile) {
44b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Get the manager for the original profile, since the PolicyService is
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // also shared between the incognito Profile and the original Profile.
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ManagerMap::const_iterator it = managers_.find(profile->GetOriginalProfile());
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return it != managers_.end() ? it->second : NULL;
48b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
49b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager>
51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    UserCloudPolicyManagerFactory::CreateManagerForProfile(
52b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        Profile* profile,
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        bool force_immediate_load) {
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(
55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)          switches::kDisableCloudPolicyOnSignin)) {
56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    return scoped_ptr<UserCloudPolicyManager>();
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  scoped_ptr<UserCloudPolicyStore> store(UserCloudPolicyStore::Create(profile));
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (force_immediate_load)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    store->LoadImmediately();
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<UserCloudPolicyManager> manager(
62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      new UserCloudPolicyManager(profile, store.Pass()));
63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  manager->Init();
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return manager.Pass();
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void UserCloudPolicyManagerFactory::BrowserContextShutdown(
68b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    content::BrowserContext* context) {
69b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  Profile* profile = static_cast<Profile*>(context);
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (profile->IsOffTheRecord())
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    return;
72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  UserCloudPolicyManager* manager = GetManagerForProfile(profile);
73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (manager) {
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    manager->CloudPolicyManager::Shutdown();
75b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    manager->BrowserContextKeyedService::Shutdown();
76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  }
77b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void UserCloudPolicyManagerFactory::SetEmptyTestingFactory(
80b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    content::BrowserContext* profile) {
81b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void UserCloudPolicyManagerFactory::CreateServiceNow(
84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    content::BrowserContext* profile) {
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void UserCloudPolicyManagerFactory::Register(Profile* profile,
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                             UserCloudPolicyManager* instance) {
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UserCloudPolicyManager*& entry = managers_[profile];
90b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  DCHECK(!entry);
91b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  entry = instance;
92b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void UserCloudPolicyManagerFactory::Unregister(
95b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    Profile* profile,
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    UserCloudPolicyManager* instance) {
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ManagerMap::iterator entry = managers_.find(profile);
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (entry != managers_.end()) {
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK_EQ(instance, entry->second);
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    managers_.erase(entry);
10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  } else {
102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    NOTREACHED();
103b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  }
104b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
106b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}  // namespace policy
107b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)