Chromium Code Reviews| Index: chrome/browser/policy/cloud/policy_header_service_factory.cc |
| diff --git a/chrome/browser/policy/cloud/policy_header_service_factory.cc b/chrome/browser/policy/cloud/policy_header_service_factory.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..011b902459feaa4a4286a4f4aedd52c30c5d399a |
| --- /dev/null |
| +++ b/chrome/browser/policy/cloud/policy_header_service_factory.cc |
| @@ -0,0 +1,105 @@ |
| +// 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. |
| + |
| +#include "chrome/browser/policy/cloud/policy_header_service_factory.h" |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/policy/browser_policy_connector.h" |
| +#include "chrome/browser/policy/cloud/policy_header_service.h" |
| +#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h" |
| +#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" |
|
Joao da Silva
2013/12/10 08:34:21
Note that user_cloud_policy_manager[_factory].(h|c
Andrew T Wilson (Slow)
2013/12/10 20:04:57
Done.
|
| +#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" |
| +#include "components/policy/core/common/cloud/cloud_policy_store.h" |
| +#include "components/policy/core/common/cloud/device_management_service.h" |
| + |
| +#if defined(OS_CHROMEOS) |
| +#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" |
| +#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" |
| +#endif |
| + |
| +namespace policy { |
| + |
| +namespace { |
| + |
| +class PolicyHeaderServiceWrapper : public BrowserContextKeyedService { |
| + public: |
| + explicit PolicyHeaderServiceWrapper(scoped_ptr<PolicyHeaderService> service) |
| + : policy_header_service_(service.Pass()) {} |
| + |
| + PolicyHeaderService* policy_header_service() const { |
| + return policy_header_service_.get(); |
| + } |
| + |
| + virtual void Shutdown() OVERRIDE { |
| + // Shutdown our core object so it can unregister any observers before the |
| + // services we depend on are shutdown. |
| + policy_header_service_.reset(); |
| + } |
| + |
| + private: |
| + scoped_ptr<PolicyHeaderService> policy_header_service_; |
| +}; |
| + |
| +} // namespace |
| + |
| +PolicyHeaderServiceFactory::PolicyHeaderServiceFactory() |
| + : BrowserContextKeyedServiceFactory( |
| + "PolicyHeaderServiceFactory", |
| + BrowserContextDependencyManager::GetInstance()) { |
| +#if defined(OS_CHROMEOS) |
| + DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); |
| +#else |
| + DependsOn(UserCloudPolicyManagerFactory::GetInstance()); |
| +#endif |
| +} |
| + |
| +PolicyHeaderServiceFactory::~PolicyHeaderServiceFactory() { |
| +} |
| + |
| +// static |
| +PolicyHeaderService* PolicyHeaderServiceFactory::GetForBrowserContext( |
| + content::BrowserContext* context) { |
| + PolicyHeaderServiceWrapper* wrapper = |
| + static_cast<PolicyHeaderServiceWrapper*>( |
| + GetInstance()->GetServiceForBrowserContext(context, true)); |
| + if (wrapper) |
| + return wrapper->policy_header_service(); |
| + else |
| + return NULL; |
| +} |
| + |
| +BrowserContextKeyedService* |
| +PolicyHeaderServiceFactory::BuildServiceInstanceFor( |
| + content::BrowserContext* context) const { |
| + BrowserPolicyConnector* connector = |
| + g_browser_process->browser_policy_connector(); |
| + DeviceManagementService* device_management_service = |
| + connector->device_management_service(); |
| +#if defined(OS_CHROMEOS) |
| + UserCloudPolicyManager* manager = |
|
Joao da Silva
2013/12/10 08:34:22
UserCloudPolicyManagerChromeOS
Andrew T Wilson (Slow)
2013/12/10 20:04:57
Done.
|
| + UserCloudPolicyManagerFactoryChromeOS::GetForProfile( |
| + static_cast<Profile*>(context)); |
| +#else |
| + UserCloudPolicyManager* manager = |
| + UserCloudPolicyManagerFactory::GetForBrowserContext(context); |
| +#endif |
| + CloudPolicyStore* user_store = manager->core()->store(); |
| + CloudPolicyStore* device_store = NULL; |
| +#if defined(OS_CHROMEOS) |
| + device_store = connector->GetDeviceCloudPolicyManager()->core()->store(); |
| +#endif |
| + |
| + scoped_ptr<PolicyHeaderService> service = make_scoped_ptr( |
| + new PolicyHeaderService( |
| + device_management_service->GetServerUrl(), user_store, device_store)); |
| + return new PolicyHeaderServiceWrapper(service.Pass()); |
| +} |
| + |
| +// static |
| +PolicyHeaderServiceFactory* PolicyHeaderServiceFactory::GetInstance() { |
| + return Singleton<PolicyHeaderServiceFactory>::get(); |
| +} |
| + |
| +} // namespace policy |