user_cloud_policy_manager_factory.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/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) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// A KeyedService that wraps a UserCloudPolicyManager. 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class UserCloudPolicyManagerFactory::ManagerWrapper : public KeyedService { 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) explicit ManagerWrapper(UserCloudPolicyManager* manager) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : manager_(manager) { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(manager); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~ManagerWrapper() {} 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void Shutdown() OVERRIDE { 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) manager_->Shutdown(); 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserCloudPolicyManager* manager() { return manager_; } 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private: 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UserCloudPolicyManager* manager_; 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ManagerWrapper); 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory* UserCloudPolicyManagerFactory::GetInstance() { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Singleton<UserCloudPolicyManagerFactory>::get(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* UserCloudPolicyManagerFactory::GetForBrowserContext( 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetInstance()->GetManagerForBrowserContext(context); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::CreateForOriginalBrowserContext( 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context, 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& file_task_runner, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) { 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserCloudPolicyManagerFactory* factory = GetInstance(); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If there's a testing factory set, don't bother creating a new one. 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (factory->testing_factory_ != NULL) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<UserCloudPolicyManager>(); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return factory->CreateManagerForOriginalBrowserContext( 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context, 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) force_immediate_load, 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) background_task_runner, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_task_runner, 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) io_task_runner); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::RegisterForOffTheRecordBrowserContext( 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* original_context, 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* off_the_record_context) { 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return GetInstance()->RegisterManagerForOffTheRecordBrowserContext( 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) original_context, off_the_record_context); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UserCloudPolicyManagerFactory::RegisterTestingFactory( 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestingFactoryFunction factory) { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Can't set a testing factory when a testing factory has already been 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // created, or after UCPMs have already been built. 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!testing_factory_); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(factory); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(manager_wrappers_.empty()); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_ = factory; 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UserCloudPolicyManagerFactory::ClearTestingFactory() { 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_ = NULL; 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserCloudPolicyManagerFactory::UserCloudPolicyManagerFactory() 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedBaseFactory( 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "UserCloudPolicyManager", 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserContextDependencyManager::GetInstance()), 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_factory_(NULL) { 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DependsOn(SchemaRegistryServiceFactory::GetInstance()); 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)UserCloudPolicyManagerFactory::~UserCloudPolicyManagerFactory() { 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(manager_wrappers_.empty()); 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManager* 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::GetManagerForBrowserContext( 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) { 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // In case |context| is an incognito Profile/Context, |manager_wrappers_| 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // will have a matching entry pointing to the manager of the original context. 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ManagerWrapperMap::const_iterator it = manager_wrappers_.find(context); 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return it != manager_wrappers_.end() ? it->second->manager() : NULL; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<UserCloudPolicyManager> 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UserCloudPolicyManagerFactory::CreateManagerForOriginalBrowserContext( 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context, 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool force_immediate_load, 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& file_task_runner, 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) { 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!context->IsOffTheRecord()); 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This should never be called if we're using a testing factory. 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Instead, instances are instantiated via CreateServiceNow(). 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!testing_factory_); 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_ptr<UserCloudPolicyStore> store( 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) UserCloudPolicyStore::Create(context->GetPath(), 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetPolicyVerificationKey(), 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) background_task_runner)); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (force_immediate_load) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) store->LoadImmediately(); 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath component_policy_cache_dir = 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->GetPath().Append(kPolicy).Append(kComponentsDir); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<UserCloudPolicyManager> manager; 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) manager.reset(new UserCloudPolicyManager( 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) store.Pass(), 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) component_policy_cache_dir, 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<CloudExternalDataManager>(), 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_task_runner, 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) io_task_runner)); 1636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) manager->Init( 1646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SchemaRegistryServiceFactory::GetForContext(context)->registry()); 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) 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool UserCloudPolicyManagerFactory::HasTestingFactory( 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* context) { 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return testing_factory_ != NULL; 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// If there's a TestingFactory set, then create a service during BrowserContext 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// initialization. 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool UserCloudPolicyManagerFactory::ServiceIsCreatedWithBrowserContext() const { 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return testing_factory_ != NULL; 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UserCloudPolicyManagerFactory::CreateServiceNow( 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::BrowserContext* context) { 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(testing_factory_); 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) manager_wrappers_[context] = new ManagerWrapper(testing_factory_(context)); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 222