Chromium Code Reviews| 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 |