user_cloud_policy_manager_factory.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/files/file_path.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/sequenced_task_runner.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/policy/schema_registry_service_factory.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_store.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/browser_context.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Directory inside the profile directory where policy-related resources are 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// stored. 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const base::FilePath::CharType kPolicy[] = FILE_PATH_LITERAL("Policy"); 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Directory under kPolicy, in the user's profile dir, where policy for 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// components is cached. 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const base::FilePath::CharType kComponentsDir[] = 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FILE_PATH_LITERAL("Components"); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// A BrowserContextKeyedService that wraps a UserCloudPolicyManager. 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class UserCloudPolicyManagerFactory::ManagerWrapper 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : public BrowserContextKeyedService { 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) explicit ManagerWrapper(UserCloudPolicyManager* manager) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : manager_(manager) { 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(manager); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~ManagerWrapper() {} 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void Shutdown() OVERRIDE { 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manager_->Shutdown(); 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserCloudPolicyManager* manager() { return manager_; } 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private: 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserCloudPolicyManager* manager_; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ManagerWrapper); 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Singleton<UserCloudPolicyManagerFactory>::get(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForBrowserContext( 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) { 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetInstance()->GetManagerForBrowserContext(context); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::CreateForOriginalBrowserContext( 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context, 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& file_task_runner, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) { 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserCloudPolicyManagerFactory* factory = GetInstance(); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If there's a testing factory set, don't bother creating a new one. 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (factory->testing_factory_ != NULL) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<UserCloudPolicyManager>(); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return factory->CreateManagerForOriginalBrowserContext( 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context, 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) force_immediate_load, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) background_task_runner, 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_task_runner, 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_task_runner); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::RegisterForOffTheRecordBrowserContext( 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* original_context, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* off_the_record_context) { 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetInstance()->RegisterManagerForOffTheRecordBrowserContext( 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) original_context, off_the_record_context); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UserCloudPolicyManagerFactory::RegisterTestingFactory( 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestingFactoryFunction factory) { 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Can't set a testing factory when a testing factory has already been 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // created, or after UCPMs have already been built. 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!testing_factory_); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(factory); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(manager_wrappers_.empty()); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_ = factory; 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UserCloudPolicyManagerFactory::ClearTestingFactory() { 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_ = NULL; 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory() 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UserCloudPolicyManager", 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserContextDependencyManager::GetInstance()), 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_(NULL) { 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(SchemaRegistryServiceFactory::GetInstance()); 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() { 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(manager_wrappers_.empty()); 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::GetManagerForBrowserContext( 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) { 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // In case |context| is an incognito Profile/Context, |manager_wrappers_| 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // will have a matching entry pointing to the manager of the original context. 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ManagerWrapperMap::const_iterator it = manager_wrappers_.find(context); 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return it != manager_wrappers_.end() ? it->second->manager() : NULL; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::CreateManagerForOriginalBrowserContext( 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context, 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool force_immediate_load, 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& file_task_runner, 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) { 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!context->IsOffTheRecord()); 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This should never be called if we're using a testing factory. 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Instead, instances are instantiated via CreateServiceNow(). 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!testing_factory_); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<UserCloudPolicyStore> store( 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserCloudPolicyStore::Create(context->GetPath(), 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetPolicyVerificationKey(), 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) background_task_runner)); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (force_immediate_load) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store->LoadImmediately(); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath component_policy_cache_dir = 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->GetPath().Append(kPolicy).Append(kComponentsDir); 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<UserCloudPolicyManager> manager; 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) manager.reset(new UserCloudPolicyManager( 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) store.Pass(), 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) component_policy_cache_dir, 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<CloudExternalDataManager>(), 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_task_runner, 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) io_task_runner)); 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manager->Init(SchemaRegistryServiceFactory::GetForContext(context)); 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manager_wrappers_[context] = new ManagerWrapper(manager.get()); 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return manager.Pass(); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::RegisterManagerForOffTheRecordBrowserContext( 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* original_context, 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* off_the_record_context) { 173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Register the UserCloudPolicyManager of the original context for the 174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // respective incognito context. See also GetManagerForBrowserContext. 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManager* manager = 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetManagerForBrowserContext(original_context); 177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manager_wrappers_[off_the_record_context] = new ManagerWrapper(manager); 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return manager; 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void UserCloudPolicyManagerFactory::BrowserContextShutdown( 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) { 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (context->IsOffTheRecord()) 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return; 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ManagerWrapperMap::iterator it = manager_wrappers_.find(context); 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // E.g. for a TestingProfile there might not be a manager created. 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (it != manager_wrappers_.end()) 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) it->second->Shutdown(); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UserCloudPolicyManagerFactory::BrowserContextDestroyed( 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) { 193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ManagerWrapperMap::iterator it = manager_wrappers_.find(context); 194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (it != manager_wrappers_.end()) { 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The manager is not owned by the factory, so it's not deleted here. 196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delete it->second; 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manager_wrappers_.erase(it); 198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UserCloudPolicyManagerFactory::SetEmptyTestingFactory( 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content::BrowserContext* context) {} 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// If there's a TestingFactory set, then create a service during BrowserContext 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// initialization. 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool UserCloudPolicyManagerFactory::ServiceIsCreatedWithBrowserContext() const { 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return testing_factory_ != NULL; 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UserCloudPolicyManagerFactory::CreateServiceNow( 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::BrowserContext* context) { 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(testing_factory_); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) manager_wrappers_[context] = new ManagerWrapper(testing_factory_(context)); 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 217