1// Copyright 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#include "chrome/browser/policy/cloud/policy_header_service_factory.h" 6 7#include "base/memory/scoped_ptr.h" 8#include "chrome/browser/browser_process.h" 9#include "chrome/browser/profiles/profile.h" 10#include "components/keyed_service/content/browser_context_dependency_manager.h" 11#include "components/policy/core/browser/browser_policy_connector.h" 12#include "components/policy/core/common/cloud/cloud_policy_store.h" 13#include "components/policy/core/common/cloud/device_management_service.h" 14#include "components/policy/core/common/cloud/policy_header_service.h" 15 16#if defined(OS_CHROMEOS) 17#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 18#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" 19#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 20#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 21#else 22#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 23#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 24#endif 25 26namespace policy { 27 28namespace { 29 30class PolicyHeaderServiceWrapper : public KeyedService { 31 public: 32 explicit PolicyHeaderServiceWrapper(scoped_ptr<PolicyHeaderService> service) 33 : policy_header_service_(service.Pass()) {} 34 35 PolicyHeaderService* policy_header_service() const { 36 return policy_header_service_.get(); 37 } 38 39 virtual void Shutdown() OVERRIDE { 40 // Shutdown our core object so it can unregister any observers before the 41 // services we depend on are shutdown. 42 policy_header_service_.reset(); 43 } 44 45 private: 46 scoped_ptr<PolicyHeaderService> policy_header_service_; 47}; 48 49} // namespace 50 51PolicyHeaderServiceFactory::PolicyHeaderServiceFactory() 52 : BrowserContextKeyedServiceFactory( 53 "PolicyHeaderServiceFactory", 54 BrowserContextDependencyManager::GetInstance()) { 55#if defined(OS_CHROMEOS) 56 DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); 57#else 58 DependsOn(UserCloudPolicyManagerFactory::GetInstance()); 59#endif 60} 61 62PolicyHeaderServiceFactory::~PolicyHeaderServiceFactory() { 63} 64 65// static 66PolicyHeaderService* PolicyHeaderServiceFactory::GetForBrowserContext( 67 content::BrowserContext* context) { 68 PolicyHeaderServiceWrapper* wrapper = 69 static_cast<PolicyHeaderServiceWrapper*>( 70 GetInstance()->GetServiceForBrowserContext(context, true)); 71 if (wrapper) 72 return wrapper->policy_header_service(); 73 else 74 return NULL; 75} 76 77KeyedService* PolicyHeaderServiceFactory::BuildServiceInstanceFor( 78 content::BrowserContext* context) const { 79#if defined(OS_CHROMEOS) 80 BrowserPolicyConnectorChromeOS* connector = 81 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 82#else 83 BrowserPolicyConnector* connector = 84 g_browser_process->browser_policy_connector(); 85#endif 86 87 DeviceManagementService* device_management_service = 88 connector->device_management_service(); 89#if defined(OS_CHROMEOS) 90 CloudPolicyManager* manager = 91 UserCloudPolicyManagerFactoryChromeOS::GetForProfile( 92 Profile::FromBrowserContext(context)); 93#else 94 CloudPolicyManager* manager = 95 UserCloudPolicyManagerFactory::GetForBrowserContext(context); 96#endif 97 if (!manager) 98 return NULL; 99 CloudPolicyStore* user_store = manager->core()->store(); 100 CloudPolicyStore* device_store = NULL; 101#if defined(OS_CHROMEOS) 102 device_store = connector->GetDeviceCloudPolicyManager()->core()->store(); 103#endif 104 105 scoped_ptr<PolicyHeaderService> service = make_scoped_ptr( 106 new PolicyHeaderService(device_management_service->GetServerUrl(), 107 kPolicyVerificationKeyHash, 108 user_store, 109 device_store)); 110 return new PolicyHeaderServiceWrapper(service.Pass()); 111} 112 113// static 114PolicyHeaderServiceFactory* PolicyHeaderServiceFactory::GetInstance() { 115 return Singleton<PolicyHeaderServiceFactory>::get(); 116} 117 118} // namespace policy 119