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