Index: chrome/browser/policy/cloud/cloud_policy_store.cc |
diff --git a/chrome/browser/policy/cloud/cloud_policy_store.cc b/chrome/browser/policy/cloud/cloud_policy_store.cc |
index 2205fb4922b1a58740848ce5c567eb1862af2b13..d7566545a721f3f5a0502678609df7e678b3cefa 100644 |
--- a/chrome/browser/policy/cloud/cloud_policy_store.cc |
+++ b/chrome/browser/policy/cloud/cloud_policy_store.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/policy/cloud/cloud_policy_store.h" |
+#include "base/hash.h" |
+ |
namespace policy { |
CloudPolicyStore::Observer::~Observer() {} |
@@ -11,10 +13,20 @@ CloudPolicyStore::Observer::~Observer() {} |
CloudPolicyStore::CloudPolicyStore() |
: status_(STATUS_OK), |
validation_status_(CloudPolicyValidatorBase::VALIDATION_OK), |
- is_initialized_(false) {} |
+ invalidation_version_(0), |
+ is_initialized_(false), |
+ policy_changed_(false), |
+ hash_value_(0) {} |
CloudPolicyStore::~CloudPolicyStore() {} |
+void CloudPolicyStore::Store( |
+ const enterprise_management::PolicyFetchResponse& policy, |
+ int64 invalidation_version) { |
+ invalidation_version_ = invalidation_version; |
+ Store(policy); |
+} |
+ |
void CloudPolicyStore::AddObserver(CloudPolicyStore::Observer* observer) { |
observers_.AddObserver(observer); |
} |
@@ -24,6 +36,14 @@ void CloudPolicyStore::RemoveObserver(CloudPolicyStore::Observer* observer) { |
} |
void CloudPolicyStore::NotifyStoreLoaded() { |
+ // Determine if the policy changed by comparing the new policy's hash value |
+ // to the previous. |
+ uint32 new_hash_value = 0; |
+ if (policy_.get() && policy_->has_policy_value()) |
Joao da Silva
2013/07/24 15:34:07
.get() is not needed to test the policy_ scoped_pt
Steve Condie
2013/07/25 01:18:08
Done.
|
+ new_hash_value = base::Hash(policy_->policy_value()); |
Joao da Silva
2013/07/24 15:34:07
Note that base::Hash does a single pass over the s
|
+ policy_changed_ = new_hash_value != hash_value_; |
+ hash_value_ = new_hash_value; |
+ |
is_initialized_ = true; |
FOR_EACH_OBSERVER(Observer, observers_, OnStoreLoaded(this)); |
} |
@@ -33,4 +53,4 @@ void CloudPolicyStore::NotifyStoreError() { |
FOR_EACH_OBSERVER(Observer, observers_, OnStoreError(this)); |
} |
-} // namespace |
+} // namespace policy |