Index: chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h |
diff --git a/chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h b/chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..339bbacbc96b8ab617ab18e24c6b7f603a936a6a |
--- /dev/null |
+++ b/chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h |
@@ -0,0 +1,109 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_POLICY_USER_POLICY_MANAGER_FACTORY_CHROMEOS_H_ |
+#define CHROME_BROWSER_CHROMEOS_POLICY_USER_POLICY_MANAGER_FACTORY_CHROMEOS_H_ |
+ |
+#include <map> |
+#include <memory> |
+ |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/singleton.h" |
+#include "components/keyed_service/content/browser_context_keyed_base_factory.h" |
+ |
+class Profile; |
+ |
+namespace base { |
+class SequencedTaskRunner; |
+} |
+ |
+namespace content { |
+class BrowserContext; |
+} |
+ |
+namespace policy { |
+ |
+class ConfigurationPolicyProvider; |
+class UserActiveDirectoryPolicyManager; |
+class UserCloudPolicyManagerChromeOS; |
+ |
+// Shared BrowserContextKeyedBaseFactory implementation for |
+// UserCloudPolicyManagerChromeOS and |
+// UserActiveDirectoryPolicyManager. |
+// |
+// UserCloudPolicyManagerChromeOS/UserActiveDirectoryPolicyManager is handled |
+// differently than other KeyedServices because it is a dependency of |
+// PrefService. Therefore, lifetime of instances is managed by Profile, Profile |
+// startup code invokes CreateForProfile() explicitly, takes ownership, and the |
+// instance is only deleted after PrefService destruction. |
+// |
+// TODO(mnissler): Remove the special lifetime management in favor of |
+// PrefService directly depending on UserCloudPolicyManagerChromeOS once the |
+// former has been converted to a KeyedService. |
+// See also http://crbug.com/131843 and http://crbug.com/131844. |
+class UserPolicyManagerFactoryChromeOS : public BrowserContextKeyedBaseFactory { |
+ public: |
+ // Returns an instance of the UserPolicyManagerFactoryChromeOS singleton. |
+ static UserPolicyManagerFactoryChromeOS* GetInstance(); |
+ |
+ // Get the ConfigurationPolicyProvider instance associated with |profile|. |
+ // Depending on the type of management, either a |
+ // UserCloudPolicyManagerChromeOS or a UserActiveDirectoryPolicyManager or |
+ // nullptr is returned. |
+ static ConfigurationPolicyProvider* GetForProfile(Profile* profile); |
+ |
+ // Returns the UserCloudPolicyManagerChromeOS instance associated with |
+ // |profile| or nullptr in case there is none. |
+ static UserCloudPolicyManagerChromeOS* GetCloudPolicyManagerForProfile( |
+ Profile* profile); |
+ |
+ // Returns the UserActiveDirectoryPolicyManager instance associated with |
+ // |profile| or nullptr in case there is none. |
+ static UserActiveDirectoryPolicyManager* |
+ GetActiveDirectoryPolicyManagerForProfile(Profile* profile); |
+ |
+ // Creates an instance for |profile|. Note that the caller is responsible for |
+ // managing the lifetime of the instance. Subsequent calls to GetForProfile() |
+ // will return the created instance as long as it lives. |
+ // |
+ // If |force_immediate_load| is true, policy is loaded synchronously from |
+ // UserCloudPolicyStore at startup. |
+ static std::unique_ptr<ConfigurationPolicyProvider> CreateForProfile( |
+ Profile* profile, |
+ bool force_immediate_load, |
+ scoped_refptr<base::SequencedTaskRunner> background_task_runner); |
+ |
+ private: |
+ friend struct base::DefaultSingletonTraits<UserPolicyManagerFactoryChromeOS>; |
+ |
+ UserPolicyManagerFactoryChromeOS(); |
+ ~UserPolicyManagerFactoryChromeOS() override; |
+ |
+ // See comments for the static versions above. |
+ UserCloudPolicyManagerChromeOS* GetCloudPolicyManager(Profile* profile); |
+ UserActiveDirectoryPolicyManager* GetActiveDirectoryPolicyManager( |
+ Profile* profile); |
+ std::unique_ptr<ConfigurationPolicyProvider> CreateManagerForProfile( |
+ Profile* profile, |
+ bool force_immediate_load, |
+ scoped_refptr<base::SequencedTaskRunner> background_task_runner); |
+ |
+ // BrowserContextKeyedBaseFactory: |
+ void BrowserContextShutdown(content::BrowserContext* context) override; |
+ void BrowserContextDestroyed(content::BrowserContext* context) override; |
+ void SetEmptyTestingFactory(content::BrowserContext* context) override; |
+ bool HasTestingFactory(content::BrowserContext* context) override; |
+ void CreateServiceNow(content::BrowserContext* context) override; |
+ |
+ std::map<Profile*, UserCloudPolicyManagerChromeOS*> cloud_managers_; |
+ std::map<Profile*, UserActiveDirectoryPolicyManager*> |
+ active_directory_managers_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UserPolicyManagerFactoryChromeOS); |
+}; |
+ |
+} // namespace policy |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_POLICY_USER_POLICY_MANAGER_FACTORY_CHROMEOS_H_ |