1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_FACTORY_CHROMEOS_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_FACTORY_CHROMEOS_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <map> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/memory/ref_counted.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/singleton.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_keyed_base_factory.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Profile; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace base { 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class SequencedTaskRunner; 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BrowserContext; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace policy { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class UserCloudPolicyManagerChromeOS; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// BrowserContextKeyedBaseFactory implementation 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// for UserCloudPolicyManagerChromeOS instances that initialize per-profile 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// cloud policy settings on ChromeOS. 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// UserCloudPolicyManagerChromeOS is handled different than other 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// KeyedServices because it is a dependency of PrefService. 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Therefore, lifetime of instances is managed by Profile, Profile startup code 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// invokes CreateForProfile() explicitly, takes ownership, and the instance 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// is only deleted after PrefService destruction. 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(mnissler): Remove the special lifetime management in favor of 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// PrefService directly depending on UserCloudPolicyManagerChromeOS once the 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// former has been converted to a KeyedService. 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// See also http://crbug.com/131843 and http://crbug.com/131844. 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class UserCloudPolicyManagerFactoryChromeOS 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : public BrowserContextKeyedBaseFactory { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns an instance of the UserCloudPolicyManagerFactoryChromeOS singleton. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static UserCloudPolicyManagerFactoryChromeOS* GetInstance(); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the UserCloudPolicyManagerChromeOS instance associated with 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |profile|. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static UserCloudPolicyManagerChromeOS* GetForProfile(Profile* profile); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates an instance for |profile|. Note that the caller is responsible for 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // managing the lifetime of the instance. Subsequent calls to GetForProfile() 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // will return the created instance as long as it lives. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If |force_immediate_load| is true, policy is loaded synchronously from 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // UserCloudPolicyStore at startup. 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static scoped_ptr<UserCloudPolicyManagerChromeOS> CreateForProfile( 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend struct DefaultSingletonTraits<UserCloudPolicyManagerFactoryChromeOS>; 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS(); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~UserCloudPolicyManagerFactoryChromeOS(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // See comments for the static versions above. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManagerChromeOS* GetManagerForProfile(Profile* profile); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<UserCloudPolicyManagerChromeOS> CreateManagerForProfile( 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile, 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool force_immediate_load, 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> background_task_runner); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // BrowserContextKeyedBaseFactory: 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void BrowserContextShutdown( 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::BrowserContext* context) OVERRIDE; 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void BrowserContextDestroyed( 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::BrowserContext* context) OVERRIDE; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetEmptyTestingFactory( 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) OVERRIDE; 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool HasTestingFactory(content::BrowserContext* context) OVERRIDE; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CreateServiceNow(content::BrowserContext* context) OVERRIDE; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::map<Profile*, UserCloudPolicyManagerChromeOS*> ManagerMap; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagerMap managers_; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerFactoryChromeOS); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace policy 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_POLICY_USER_CLOUD_POLICY_MANAGER_FACTORY_CHROMEOS_H_ 96