| Index: chrome/browser/policy/device_management_policy_provider.cc
|
| diff --git a/chrome/browser/policy/device_management_policy_provider.cc b/chrome/browser/policy/device_management_policy_provider.cc
|
| index babc5a41b544a0d3cc73daec7a26d27b97c7b1e4..31c9ec07f9fc526d7770ed72f8bdc827a7ece4cd 100644
|
| --- a/chrome/browser/policy/device_management_policy_provider.cc
|
| +++ b/chrome/browser/policy/device_management_policy_provider.cc
|
| @@ -11,7 +11,6 @@
|
| #include "base/time.h"
|
| #include "chrome/browser/browser_thread.h"
|
| #include "chrome/browser/policy/device_management_backend.h"
|
| -#include "chrome/browser/policy/device_management_backend_impl.h"
|
| #include "chrome/browser/policy/device_management_policy_cache.h"
|
| #include "chrome/browser/policy/device_token_fetcher.h"
|
| #include "chrome/common/chrome_paths.h"
|
| @@ -19,16 +18,12 @@
|
| #include "chrome/common/notification_service.h"
|
| #include "chrome/common/notification_type.h"
|
|
|
| -namespace {
|
| +namespace policy {
|
|
|
| const char kChromePolicyScope[] = "cros/device";
|
| const char kChromeDevicePolicySettingKey[] = "chrome-policy";
|
| const int64 kPolicyRefreshRateInMinutes = 3 * 60; // 3 hours
|
|
|
| -} // namespace
|
| -
|
| -namespace policy {
|
| -
|
| // Ensures that the portion of the policy provider implementation that requires
|
| // the IOThread is deferred until the IOThread is fully initialized. The policy
|
| // provider posts this task on the UI thread during its constructor, thereby
|
| @@ -56,25 +51,16 @@ class DeviceManagementPolicyProvider::InitializeAfterIOThreadExistsTask
|
| DeviceManagementPolicyProvider::DeviceManagementPolicyProvider(
|
| const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list,
|
| DeviceManagementBackend* backend,
|
| + TokenService* token_service,
|
| const FilePath& storage_dir)
|
| : ConfigurationPolicyProvider(policy_list),
|
| backend_(backend),
|
| + token_service_(token_service),
|
| storage_dir_(GetOrCreateDeviceManagementDir(storage_dir)),
|
| policy_request_pending_(false) {
|
| Initialize();
|
| }
|
|
|
| -DeviceManagementPolicyProvider::DeviceManagementPolicyProvider(
|
| - const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list)
|
| - : ConfigurationPolicyProvider(policy_list),
|
| - policy_request_pending_(false) {
|
| - FilePath user_dir;
|
| - if (!PathService::Get(chrome::DIR_USER_DATA, &user_dir))
|
| - NOTREACHED();
|
| - storage_dir_ = GetOrCreateDeviceManagementDir(user_dir);
|
| - Initialize();
|
| -}
|
| -
|
| DeviceManagementPolicyProvider::~DeviceManagementPolicyProvider() {}
|
|
|
| bool DeviceManagementPolicyProvider::Provide(
|
| @@ -88,11 +74,11 @@ void DeviceManagementPolicyProvider::Observe(
|
| NotificationType type,
|
| const NotificationSource& source,
|
| const NotificationDetails& details) {
|
| - if ((type == NotificationType::DEVICE_TOKEN_AVAILABLE) &&
|
| - (token_fetcher_.get() == Source<DeviceTokenFetcher>(source).ptr())) {
|
| - if (!policy_request_pending_) {
|
| - if (IsPolicyStale())
|
| - SendPolicyRequest();
|
| + if (type == NotificationType::DEVICE_TOKEN_AVAILABLE) {
|
| + if (token_fetcher_.get() == Source<DeviceTokenFetcher>(source).ptr() &&
|
| + !policy_request_pending_ &&
|
| + IsPolicyStale()) {
|
| + SendPolicyRequest();
|
| }
|
| } else {
|
| NOTREACHED();
|
| @@ -114,12 +100,10 @@ void DeviceManagementPolicyProvider::OnError(
|
| // TODO(danno): do something sensible in the error case, perhaps retry later?
|
| }
|
|
|
| -DeviceManagementBackend* DeviceManagementPolicyProvider::GetBackend() {
|
| - if (!backend_.get()) {
|
| - backend_.reset(new DeviceManagementBackendImpl(
|
| - GetDeviceManagementURL()));
|
| - }
|
| - return backend_.get();
|
| +void DeviceManagementPolicyProvider::Shutdown() {
|
| + token_service_ = NULL;
|
| + if (token_fetcher_)
|
| + token_fetcher_->Shutdown();
|
| }
|
|
|
| void DeviceManagementPolicyProvider::Initialize() {
|
| @@ -141,8 +125,11 @@ void DeviceManagementPolicyProvider::Initialize() {
|
| void DeviceManagementPolicyProvider::InitializeAfterIOThreadExists() {
|
| const FilePath token_path = storage_dir_.Append(
|
| FILE_PATH_LITERAL("Token"));
|
| - token_fetcher_ = new DeviceTokenFetcher(GetBackend(), token_path);
|
| - token_fetcher_->StartFetching();
|
| + if (token_service_) {
|
| + token_fetcher_ =
|
| + new DeviceTokenFetcher(backend_.get(), token_service_, token_path);
|
| + token_fetcher_->StartFetching();
|
| + }
|
| }
|
|
|
| void DeviceManagementPolicyProvider::SendPolicyRequest() {
|
| @@ -152,9 +139,8 @@ void DeviceManagementPolicyProvider::SendPolicyRequest() {
|
| em::DevicePolicySettingRequest* setting =
|
| policy_request.add_setting_request();
|
| setting->set_key(kChromeDevicePolicySettingKey);
|
| - GetBackend()->ProcessPolicyRequest(token_fetcher_->GetDeviceToken(),
|
| - policy_request,
|
| - this);
|
| + backend_->ProcessPolicyRequest(token_fetcher_->GetDeviceToken(),
|
| + policy_request, this);
|
| policy_request_pending_ = true;
|
| }
|
| }
|
|
|