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)