Index: chrome/browser/policy/cloud_policy_provider_impl.cc |
diff --git a/chrome/browser/policy/cloud_policy_provider_impl.cc b/chrome/browser/policy/cloud_policy_provider_impl.cc |
index d1c3f3b7a21b50289370dc6f0524bcc5caeb9c40..a24c0cad0e6f98e785b58f8a03337d527f77c2a1 100644 |
--- a/chrome/browser/policy/cloud_policy_provider_impl.cc |
+++ b/chrome/browser/policy/cloud_policy_provider_impl.cc |
@@ -4,14 +4,19 @@ |
#include "chrome/browser/policy/cloud_policy_provider_impl.h" |
+#include <algorithm> |
+ |
+#include "chrome/browser/policy/browser_policy_connector.h" |
#include "chrome/browser/policy/configuration_policy_pref_store.h" |
namespace policy { |
CloudPolicyProviderImpl::CloudPolicyProviderImpl( |
+ BrowserPolicyConnector* browser_policy_connector, |
const PolicyDefinitionList* policy_list, |
CloudPolicyCacheBase::PolicyLevel level) |
: CloudPolicyProvider(policy_list), |
+ browser_policy_connector_(browser_policy_connector), |
level_(level), |
initialization_complete_(true) {} |
@@ -29,11 +34,21 @@ bool CloudPolicyProviderImpl::IsInitializationComplete() const { |
return initialization_complete_; |
} |
+void CloudPolicyProviderImpl::RefreshPolicies() { |
+ pending_update_caches_ = caches_; |
+ if (pending_update_caches_.empty()) |
+ NotifyPolicyUpdated(); |
+ else |
+ browser_policy_connector_->FetchCloudPolicy(); |
Mattias Nissler (ping if slow)
2011/11/18 11:00:25
I think there's still an issue here. This will not
Joao da Silva
2011/11/18 14:03:30
FetchCloudPolicy() triggers CloudPolicyController:
|
+} |
+ |
void CloudPolicyProviderImpl::OnCacheUpdate(CloudPolicyCacheBase* cache) { |
+ RemoveFromPending(cache); |
RecombineCachesAndTriggerUpdate(); |
} |
void CloudPolicyProviderImpl::OnCacheGoingAway(CloudPolicyCacheBase* cache) { |
+ RemoveFromPending(cache); |
cache->RemoveObserver(this); |
for (ListType::iterator i = caches_.begin(); i != caches_.end(); ++i) { |
Mattias Nissler (ping if slow)
2011/11/18 11:00:25
can we please use std::find + erase here? :) Also,
Joao da Silva
2011/11/18 14:03:30
Done.
|
if (*i == cache) { |
@@ -112,7 +127,16 @@ void CloudPolicyProviderImpl::RecombineCachesAndTriggerUpdate() { |
// Trigger a notification. |
combined_.Swap(&newly_combined); |
- NotifyPolicyUpdated(); |
+ if (pending_update_caches_.empty()) |
+ NotifyPolicyUpdated(); |
+} |
+ |
+void CloudPolicyProviderImpl::RemoveFromPending(CloudPolicyCacheBase* cache) { |
+ pending_update_caches_.erase( |
+ std::remove(pending_update_caches_.begin(), |
+ pending_update_caches_.end(), |
+ cache), |
+ pending_update_caches_.end()); |
} |
} // namespace policy |