user_cloud_policy_manager_factory.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/sequenced_task_runner.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_external_data_manager.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_store.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Singleton<UserCloudPolicyManagerFactory>::get(); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForProfile( 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetInstance()->GetManagerForProfile(profile); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)UserCloudPolicyManagerFactory::CreateForProfile( 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Profile* profile, 338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner) { 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GetInstance()->CreateManagerForProfile( 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile, force_immediate_load, background_task_runner); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory() 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UserCloudPolicyManager", 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) {} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() {} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetManagerForProfile( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the manager for the original profile, since the PolicyService is 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // also shared between the incognito Profile and the original Profile. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagerMap::const_iterator it = managers_.find(profile->GetOriginalProfile()); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return it != managers_.end() ? it->second : NULL; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManagerFactory::CreateManagerForProfile( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile, 578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner) { 598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<UserCloudPolicyStore> store( 608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) UserCloudPolicyStore::Create(profile, background_task_runner)); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (force_immediate_load) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store->LoadImmediately(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<UserCloudPolicyManager> manager( 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) new UserCloudPolicyManager(profile, 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) store.Pass(), 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<CloudExternalDataManager>(), 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::MessageLoopProxy::current())); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manager->Init(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return manager.Pass(); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void UserCloudPolicyManagerFactory::BrowserContextShutdown( 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (profile->IsOffTheRecord()) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManager* manager = GetManagerForProfile(profile); 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (manager) 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) manager->Shutdown(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserCloudPolicyManagerFactory::SetEmptyTestingFactory( 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) { 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserCloudPolicyManagerFactory::CreateServiceNow( 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) { 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManagerFactory::Register(Profile* profile, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManager* instance) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManager*& entry = managers_[profile]; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!entry); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) entry = instance; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void UserCloudPolicyManagerFactory::Unregister( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManager* instance) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagerMap::iterator entry = managers_.find(profile); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (entry != managers_.end()) { 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(instance, entry->second); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) managers_.erase(entry); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 110