Index: chrome/browser/policy/cloud_policy_provider.cc |
diff --git a/chrome/browser/policy/cloud_policy_provider.cc b/chrome/browser/policy/cloud_policy_provider.cc |
index be91926c3294d20e21b287328ff2ef6fe6ddabc0..c28bba9d612871b69bbdd24929df86247e6913f2 100644 |
--- a/chrome/browser/policy/cloud_policy_provider.cc |
+++ b/chrome/browser/policy/cloud_policy_provider.cc |
@@ -4,7 +4,10 @@ |
#include "chrome/browser/policy/cloud_policy_provider.h" |
+#include "base/memory/scoped_ptr.h" |
#include "chrome/browser/policy/browser_policy_connector.h" |
+#include "chrome/browser/policy/policy_bundle.h" |
+#include "chrome/browser/policy/policy_map.h" |
namespace policy { |
@@ -43,11 +46,6 @@ void CloudPolicyProvider::SetDevicePolicyCache(CloudPolicyCacheBase* cache) { |
} |
#endif |
-bool CloudPolicyProvider::ProvideInternal(PolicyMap* result) { |
- result->CopyFrom(combined_); |
- return true; |
-} |
- |
bool CloudPolicyProvider::IsInitializationComplete() const { |
return initialization_complete_; |
} |
@@ -58,14 +56,15 @@ void CloudPolicyProvider::RefreshPolicies() { |
pending_updates_.insert(caches_[i]); |
} |
if (pending_updates_.empty()) |
- NotifyPolicyUpdated(); |
+ Merge(); |
else |
browser_policy_connector_->FetchCloudPolicy(); |
} |
void CloudPolicyProvider::OnCacheUpdate(CloudPolicyCacheBase* cache) { |
pending_updates_.erase(cache); |
- Merge(); |
+ if (pending_updates_.empty()) |
+ Merge(); |
} |
void CloudPolicyProvider::OnCacheGoingAway(CloudPolicyCacheBase* cache) { |
@@ -93,17 +92,16 @@ void CloudPolicyProvider::Merge() { |
} |
} |
- combined_.Clear(); |
+ PolicyMap combined; |
for (size_t i = 0; i < CACHE_SIZE; ++i) { |
if (caches_[i] && caches_[i]->IsReady()) |
- combined_.MergeFrom(*caches_[i]->policy()); |
+ combined.MergeFrom(*caches_[i]->policy()); |
} |
- FixDeprecatedPolicies(&combined_); |
- combined_.FilterLevel(level_); |
+ combined.FilterLevel(level_); |
- // Trigger a notification. |
- if (pending_updates_.empty()) |
- NotifyPolicyUpdated(); |
+ scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); |
+ bundle->Get(POLICY_DOMAIN_CHROME, std::string()).Swap(&combined); |
+ UpdatePolicy(bundle.Pass()); |
} |
} // namespace policy |