Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1816)

Unified Diff: chrome/browser/policy/device_management_policy_provider.cc

Issue 6409040: New policy protobuf protocol. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ready for review! Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698