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