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 315a6d286887c4b5f454a7c107954e641bf383cb..a7d438a559b07065862560e8b971d2e4144b3711 100644 |
--- a/chrome/browser/policy/device_management_policy_provider.cc |
+++ b/chrome/browser/policy/device_management_policy_provider.cc |
@@ -10,6 +10,7 @@ |
#include "base/rand_util.h" |
#include "base/task.h" |
#include "chrome/browser/browser_thread.h" |
+#include "chrome/browser/policy/cloud_policy_cache.h" |
#include "chrome/browser/policy/device_management_backend.h" |
#include "chrome/browser/policy/device_management_policy_cache.h" |
#include "chrome/browser/policy/profile_policy_context.h" |
@@ -40,6 +41,8 @@ const int64 kPolicyRefreshUnmanagedDeviceInMilliseconds = 24 * 60 * 60 * 1000; |
const FilePath::StringType kDeviceTokenFilename = FILE_PATH_LITERAL("Token"); |
const FilePath::StringType kPolicyFilename = FILE_PATH_LITERAL("Policy"); |
+const FilePath::StringType kCloudPolicyFilename = |
+ FILE_PATH_LITERAL("CloudPolicy"); |
Mattias Nissler (ping if slow)
2011/02/02 12:27:55
See my other comment about having only one cache.
Jakob Kummerow
2011/02/03 14:36:52
Done.
|
// Calls back into the provider to refresh policy. |
class DeviceManagementPolicyProvider::RefreshTask : public CancelableTask { |
@@ -65,10 +68,12 @@ class DeviceManagementPolicyProvider::RefreshTask : public CancelableTask { |
DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( |
const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list, |
DeviceManagementBackend* backend, |
- Profile* profile) |
+ Profile* profile, |
+ bool cloud_policy_enabled) |
: ConfigurationPolicyProvider(policy_list) { |
Initialize(backend, |
profile, |
+ cloud_policy_enabled, |
ProfilePolicyContext::kDefaultPolicyRefreshRateInMilliseconds, |
kPolicyRefreshDeviationFactorPercent, |
kPolicyRefreshDeviationMaxInMilliseconds, |
@@ -86,13 +91,21 @@ DeviceManagementPolicyProvider::~DeviceManagementPolicyProvider() { |
bool DeviceManagementPolicyProvider::Provide( |
ConfigurationPolicyStoreInterface* policy_store) { |
- scoped_ptr<DictionaryValue> policies(cache_->GetPolicy()); |
- DecodePolicyValueTree(policies.get(), policy_store); |
+ if (cloud_policy_enabled_) { |
+ scoped_ptr<PolicyMapType> policies(cache2_->GetPolicy()); |
+ ApplyPolicyMap(policies.get(), policy_store); |
+ } else { |
+ scoped_ptr<DictionaryValue> policies(cache_->GetPolicy()); |
+ DecodePolicyValueTree(policies.get(), policy_store); |
+ } |
return true; |
} |
bool DeviceManagementPolicyProvider::IsInitializationComplete() const { |
- return !cache_->last_policy_refresh_time().is_null(); |
+ if (cloud_policy_enabled_) |
+ return !cache2_->last_policy_refresh_time().is_null(); |
+ else |
+ return !cache_->last_policy_refresh_time().is_null(); |
} |
void DeviceManagementPolicyProvider::HandlePolicyResponse( |
@@ -105,6 +118,16 @@ void DeviceManagementPolicyProvider::HandlePolicyResponse( |
SetState(STATE_POLICY_VALID); |
} |
+void DeviceManagementPolicyProvider::HandleCloudPolicyResponse( |
+ const em::CloudPolicyResponse& response) { |
+ DCHECK(TokenAvailable()); |
+ if (cache2_->SetPolicy(response)) { |
+ initial_fetch_done_ = true; |
+ NotifyCloudPolicyUpdate(); |
+ } |
+ SetState(STATE_POLICY_VALID); |
+} |
+ |
void DeviceManagementPolicyProvider::OnError( |
DeviceManagementBackend::ErrorCode code) { |
DCHECK(TokenAvailable()); |
@@ -140,7 +163,10 @@ void DeviceManagementPolicyProvider::OnTokenError() { |
void DeviceManagementPolicyProvider::OnNotManaged() { |
DCHECK(!TokenAvailable()); |
VLOG(1) << "This device is not managed."; |
- cache_->SetDeviceUnmanaged(); |
+ if (cloud_policy_enabled_) |
+ cache2_->SetUnmanaged(); |
+ else |
+ cache_->SetDeviceUnmanaged(); |
SetState(STATE_UNMANAGED); |
} |
@@ -157,6 +183,7 @@ DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( |
const PolicyDefinitionList* policy_list, |
DeviceManagementBackend* backend, |
Profile* profile, |
+ bool cloud_policy_enabled, |
int64 policy_refresh_rate_ms, |
int policy_refresh_deviation_factor_percent, |
int64 policy_refresh_deviation_max_ms, |
@@ -166,6 +193,7 @@ DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( |
: ConfigurationPolicyProvider(policy_list) { |
Initialize(backend, |
profile, |
+ cloud_policy_enabled, |
policy_refresh_rate_ms, |
policy_refresh_deviation_factor_percent, |
policy_refresh_deviation_max_ms, |
@@ -177,6 +205,7 @@ DeviceManagementPolicyProvider::DeviceManagementPolicyProvider( |
void DeviceManagementPolicyProvider::Initialize( |
DeviceManagementBackend* backend, |
Profile* profile, |
+ bool cloud_policy_enabled, |
int64 policy_refresh_rate_ms, |
int policy_refresh_deviation_factor_percent, |
int64 policy_refresh_deviation_max_ms, |
@@ -200,14 +229,22 @@ void DeviceManagementPolicyProvider::Initialize( |
effective_token_fetch_error_delay_ms_ = token_fetch_error_delay_ms; |
unmanaged_device_refresh_rate_ms_ = unmanaged_device_refresh_rate_ms; |
- const FilePath policy_path = storage_dir_.Append(kPolicyFilename); |
- cache_.reset(new DeviceManagementPolicyCache(policy_path)); |
- cache_->LoadPolicyFromFile(); |
+ cloud_policy_enabled_ = cloud_policy_enabled; |
+ if (cloud_policy_enabled_) { |
+ const FilePath policy_path = storage_dir_.Append(kCloudPolicyFilename); |
+ cache2_.reset(new CloudPolicyCache(policy_path)); |
+ cache2_->LoadPolicyFromFile(); |
+ } else { |
+ const FilePath policy_path = storage_dir_.Append(kPolicyFilename); |
+ cache_.reset(new DeviceManagementPolicyCache(policy_path)); |
+ cache_->LoadPolicyFromFile(); |
+ } |
SetDeviceTokenFetcher(new DeviceTokenFetcher(backend_.get(), profile, |
GetTokenPath())); |
- if (cache_->is_device_unmanaged()) { |
+ if ((cloud_policy_enabled_ && cache2_->is_unmanaged()) || |
+ (!cloud_policy_enabled_ && cache_->is_device_unmanaged())) { |
// This is a non-first login on an unmanaged device. |
SetState(STATE_UNMANAGED); |
} else { |
@@ -226,15 +263,23 @@ void DeviceManagementPolicyProvider::RemoveObserver( |
} |
void DeviceManagementPolicyProvider::SendPolicyRequest() { |
- em::DevicePolicyRequest policy_request; |
- policy_request.set_policy_scope(kChromePolicyScope); |
- em::DevicePolicySettingRequest* setting = |
- policy_request.add_setting_request(); |
- setting->set_key(kChromeDevicePolicySettingKey); |
- setting->set_watermark(""); |
- backend_->ProcessPolicyRequest(token_fetcher_->GetDeviceToken(), |
- token_fetcher_->GetDeviceID(), |
- policy_request, this); |
+ if (cloud_policy_enabled_) { |
+ em::CloudPolicyRequest policy_request; |
+ policy_request.set_policy_scope(kChromePolicyScope); |
+ backend_->ProcessCloudPolicyRequest(token_fetcher_->GetDeviceToken(), |
+ token_fetcher_->GetDeviceID(), |
+ policy_request, this); |
+ } else { |
+ em::DevicePolicyRequest policy_request; |
+ policy_request.set_policy_scope(kChromePolicyScope); |
+ em::DevicePolicySettingRequest* setting = |
+ policy_request.add_setting_request(); |
+ setting->set_key(kChromeDevicePolicySettingKey); |
+ setting->set_watermark(""); |
+ backend_->ProcessPolicyRequest(token_fetcher_->GetDeviceToken(), |
+ token_fetcher_->GetDeviceID(), |
+ policy_request, this); |
+ } |
} |
void DeviceManagementPolicyProvider::RefreshTaskExecute() { |
@@ -299,7 +344,9 @@ void DeviceManagementPolicyProvider::SetState( |
base::Time now(base::Time::NowFromSystemTime()); |
base::Time refresh_at; |
- base::Time last_refresh(cache_->last_policy_refresh_time()); |
+ base::Time last_refresh(cloud_policy_enabled_ ? |
+ cache2_->last_policy_refresh_time() : |
+ cache_->last_policy_refresh_time()); |
if (last_refresh.is_null()) |
last_refresh = now; |