blob: 04bc9f5bcb728474ced65a27c81c5dfc8b0ecf6a [file] [log] [blame]
// Copyright 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/profiles/profile.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/policy/core/browser/browser_policy_connector.h"
#include "components/policy/core/common/cloud/cloud_policy_store.h"
#include "components/policy/core/common/cloud/device_management_service.h"
#include "components/policy/core/common/cloud/policy_header_service.h"
#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
#else
#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
#include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
#endif
namespace policy {
namespace {
class PolicyHeaderServiceWrapper : public KeyedService {
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;
}
KeyedService* PolicyHeaderServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
#if defined(OS_CHROMEOS)
BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos();
#else
BrowserPolicyConnector* connector =
g_browser_process->browser_policy_connector();
#endif
DeviceManagementService* device_management_service =
connector->device_management_service();
#if defined(OS_CHROMEOS)
CloudPolicyManager* manager =
UserCloudPolicyManagerFactoryChromeOS::GetForProfile(
Profile::FromBrowserContext(context));
#else
CloudPolicyManager* manager =
UserCloudPolicyManagerFactory::GetForBrowserContext(context);
#endif
if (!manager)
return NULL;
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(),
kPolicyVerificationKeyHash,
user_store,
device_store));
return new PolicyHeaderServiceWrapper(service.Pass());
}
// static
PolicyHeaderServiceFactory* PolicyHeaderServiceFactory::GetInstance() {
return Singleton<PolicyHeaderServiceFactory>::get();
}
} // namespace policy