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

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

Issue 6537020: Update policy backend and testserver for the newest policy protocol (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit tests and chromeos crashes Created 9 years, 10 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/cloud_policy_cache.cc
diff --git a/chrome/browser/policy/cloud_policy_cache.cc b/chrome/browser/policy/cloud_policy_cache.cc
index c7b96b8874af89b647996f72a42bb288a46a6d03..c127c1e43d56bb2a2d46a9bb088a38ddb6004063 100644
--- a/chrome/browser/policy/cloud_policy_cache.cc
+++ b/chrome/browser/policy/cloud_policy_cache.cc
@@ -82,7 +82,7 @@ class CloudPolicyCache::CloudPolicyProvider
class PersistPolicyTask : public Task {
public:
PersistPolicyTask(const FilePath& path,
- const em::CloudPolicyResponse* cloud_policy_response,
+ const em::PolicyFetchResponse* cloud_policy_response,
const em::DevicePolicyResponse* device_policy_response,
const bool is_unmanaged)
: path_(path),
@@ -95,7 +95,7 @@ class PersistPolicyTask : public Task {
virtual void Run();
const FilePath path_;
- scoped_ptr<const em::CloudPolicyResponse> cloud_policy_response_;
+ scoped_ptr<const em::PolicyFetchResponse> cloud_policy_response_;
scoped_ptr<const em::DevicePolicyResponse> device_policy_response_;
const bool is_unmanaged_;
};
@@ -132,7 +132,8 @@ CloudPolicyCache::CloudPolicyCache(
device_policy_(new DictionaryValue),
initialization_complete_(false),
is_unmanaged_(false),
- has_device_policy_(false) {
+ has_device_policy_(false),
+ last_policy_server_timestamp_(0) {
managed_policy_provider_.reset(
new CloudPolicyProvider(
ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
@@ -172,6 +173,7 @@ void CloudPolicyCache::LoadFromFile() {
return;
}
base::Time timestamp;
+ int64 raw_timestamp;
PolicyMap mandatory_policy;
PolicyMap recommended_policy;
is_unmanaged_ = cached_response.unmanaged();
@@ -182,7 +184,8 @@ void CloudPolicyCache::LoadFromFile() {
bool ok = DecodePolicyResponse(cached_response.cloud_policy(),
&mandatory_policy,
&recommended_policy,
- &timestamp);
+ &timestamp,
+ &raw_timestamp);
if (!ok) {
LOG(WARNING) << "Decoding policy data failed.";
return;
@@ -197,6 +200,7 @@ void CloudPolicyCache::LoadFromFile() {
if (cached_response.has_cloud_policy()) {
mandatory_policy_.Swap(&mandatory_policy);
recommended_policy_.Swap(&recommended_policy);
+ last_policy_server_timestamp_ = raw_timestamp;
has_device_policy_ = false;
} else if (cached_response.has_device_policy()) {
scoped_ptr<DictionaryValue> value(
@@ -211,15 +215,16 @@ void CloudPolicyCache::LoadFromFile() {
observer_list_, OnUpdatePolicy());
}
-void CloudPolicyCache::SetPolicy(const em::CloudPolicyResponse& policy) {
+void CloudPolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) {
DCHECK(CalledOnValidThread());
bool initialization_was_not_complete = !initialization_complete_;
is_unmanaged_ = false;
base::Time timestamp;
+ int64 raw_timestamp;
PolicyMap mandatory_policy;
PolicyMap recommended_policy;
bool ok = DecodePolicyResponse(policy, &mandatory_policy, &recommended_policy,
- &timestamp);
+ &timestamp, &raw_timestamp);
if (!ok)
return;
@@ -230,6 +235,7 @@ void CloudPolicyCache::SetPolicy(const em::CloudPolicyResponse& policy) {
recommended_policy_.Swap(&recommended_policy);
initialization_complete_ = true;
last_policy_refresh_time_ = timestamp;
+ last_policy_server_timestamp_ = raw_timestamp;
has_device_policy_ = false;
if (new_policy_differs || initialization_was_not_complete) {
@@ -242,7 +248,7 @@ void CloudPolicyCache::SetPolicy(const em::CloudPolicyResponse& policy) {
LOG(WARNING) << "Server returned policy with timestamp from the future, "
"not persisting to disk.";
} else {
- em::CloudPolicyResponse* policy_copy = new em::CloudPolicyResponse;
+ em::PolicyFetchResponse* policy_copy = new em::PolicyFetchResponse;
policy_copy->CopyFrom(policy);
BrowserThread::PostTask(
BrowserThread::FILE,
@@ -305,33 +311,42 @@ void CloudPolicyCache::SetUnmanaged() {
// static
bool CloudPolicyCache::DecodePolicyResponse(
- const em::CloudPolicyResponse& policy_response,
+ const em::PolicyFetchResponse& policy_response,
PolicyMap* mandatory,
PolicyMap* recommended,
- base::Time* timestamp) {
- std::string data = policy_response.signed_response();
+ base::Time* timestamp,
+ int64* raw_timestamp) {
+ std::string data = policy_response.policy_data();
- if (!VerifySignature(policy_response.signature(), data,
+ if (!VerifySignature(policy_response.policy_data_signature(), data,
policy_response.certificate_chain())) {
LOG(WARNING) << "Failed to verify signature.";
return false;
}
- em::SignedCloudPolicyResponse response;
- if (!response.ParseFromArray(data.c_str(), data.size())) {
- LOG(WARNING) << "Failed to parse SignedCloudPolicyResponse protobuf.";
+ em::PolicyData policy_data;
+ if (!policy_data.ParseFromString(data)) {
+ LOG(WARNING) << "Failed to parse PolicyData protobuf.";
return false;
}
- // TODO(jkummerow): Verify response.device_token(). Needs final specification
- // which token we're actually sending / expecting to get back.
+ // TODO(jkummerow): Verify policy_data.device_token(). Needs final
+ // specification which token we're actually sending / expecting to get back.
- // TODO(jkummerow): Store response.device_name(), if we decide to transfer
+ // TODO(jkummerow): Store policy_data.device_name(), if we decide to transfer
// it from the server to the client.
DCHECK(timestamp);
- *timestamp = base::Time::FromTimeT(response.timestamp());
- DecodePolicy(response.settings(), mandatory, recommended);
+ DCHECK(raw_timestamp);
+ *raw_timestamp = policy_data.timestamp();
+ *timestamp = base::Time::UnixEpoch() +
+ base::TimeDelta::FromMilliseconds(*raw_timestamp);
+ em::CloudPolicySettings policy;
+ if (!policy.ParseFromString(policy_data.policy_value())) {
+ LOG(WARNING) << "Failed to parse CloudPolicySettingsj protobuf.";
Jakob Kummerow 2011/02/28 11:06:31 nit: j?
gfeher 2011/02/28 12:21:32 Done.
+ return false;
+ }
+ DecodePolicy(policy, mandatory, recommended);
return true;
}

Powered by Google App Engine
This is Rietveld 408576698