Index: chrome/browser/policy/cloud/cloud_policy_invalidator.cc |
diff --git a/chrome/browser/policy/cloud/cloud_policy_invalidator.cc b/chrome/browser/policy/cloud/cloud_policy_invalidator.cc |
index e4fed05bed51a0f89afc72cabb176b41a3642901..34eb0f86fd91c7f842fccc6daf4174680d978d9d 100644 |
--- a/chrome/browser/policy/cloud/cloud_policy_invalidator.cc |
+++ b/chrome/browser/policy/cloud/cloud_policy_invalidator.cc |
@@ -92,13 +92,13 @@ void CloudPolicyInvalidator::OnIncomingInvalidation( |
const syncer::ObjectIdInvalidationMap& invalidation_map) { |
DCHECK(state_ == STARTED); |
DCHECK(thread_checker_.CalledOnValidThread()); |
- const syncer::ObjectIdInvalidationMap::const_iterator invalidation = |
- invalidation_map.find(object_id_); |
- if (invalidation == invalidation_map.end()) { |
+ const syncer::SingleObjectInvalidationSet& list = |
+ invalidation_map.ForObject(object_id_); |
+ if (list.IsEmpty()) { |
NOTREACHED(); |
return; |
} |
- HandleInvalidation(invalidation->second); |
+ HandleInvalidation(list.back()); |
} |
void CloudPolicyInvalidator::OnCoreConnected(CloudPolicyCore* core) {} |
@@ -156,7 +156,7 @@ void CloudPolicyInvalidator::HandleInvalidation( |
const syncer::Invalidation& invalidation) { |
// The invalidation service may send an invalidation more than once if there |
// is a delay in acknowledging it. Duplicate invalidations are ignored. |
- if (invalid_ && ack_handle_.Equals(invalidation.ack_handle)) |
+ if (invalid_ && ack_handle_.Equals(invalidation.ack_handle())) |
return; |
// If there is still a pending invalidation, acknowledge it, since we only |
@@ -166,15 +166,17 @@ void CloudPolicyInvalidator::HandleInvalidation( |
// Update invalidation state. |
invalid_ = true; |
- ack_handle_ = invalidation.ack_handle; |
- invalidation_version_ = invalidation.version; |
+ ack_handle_ = invalidation.ack_handle(); |
// When an invalidation with unknown version is received, use negative |
// numbers based on the number of such invalidations received. This |
// ensures that the version numbers do not collide with "real" versions |
// (which are positive) or previous invalidations with unknown version. |
- if (invalidation_version_ == syncer::Invalidation::kUnknownVersion) |
+ if (invalidation.is_unknown_version()) { |
invalidation_version_ = -(++unknown_version_invalidation_count_); |
+ } else { |
+ invalidation_version_ = invalidation.version(); |
+ } |
// In order to prevent the cloud policy server from becoming overwhelmed when |
// a policy with many users is modified, delay for a random period of time |
@@ -184,11 +186,14 @@ void CloudPolicyInvalidator::HandleInvalidation( |
base::TimeDelta delay = base::TimeDelta::FromMilliseconds( |
base::RandInt(20, max_fetch_delay_)); |
- // If there is a payload, the policy can be refreshed at any time, so set |
- // the version and payload on the client immediately. Otherwise, the refresh |
+ std::string payload; |
+ if (!invalidation.is_unknown_version()) |
+ payload = invalidation.payload(); |
Steve Condie
2013/10/01 18:53:10
Optional. To avoid making an unnecessary copy of t
rlarocque
2013/10/01 19:29:57
That's a good suggestion, but I'd prefer to leave
|
+ |
+ // If there is a payload, the invalidate callback can run at any time, so set |
Steve Condie
2013/10/01 18:53:10
It looks like you accidentally modified this comme
rlarocque
2013/10/01 19:29:57
Sorry about that. Reverted.
|
+ // the version and payload on the client immediately. Otherwise, the callback |
// must only run after at least kMissingPayloadDelay minutes. |
- const std::string& payload = invalidation.payload; |
- if (!invalidation.payload.empty()) |
+ if (!payload.empty()) |
core_->client()->SetInvalidationInfo(invalidation_version_, payload); |
else |
delay += base::TimeDelta::FromMinutes(kMissingPayloadDelay); |