Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1788)

Unified Diff: chrome/browser/policy/configuration_policy_provider.cc

Issue 10386097: Refactored ConfigurationPolicyProvider to provide PolicyBundles instead of PolicyMaps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/configuration_policy_provider.cc
diff --git a/chrome/browser/policy/configuration_policy_provider.cc b/chrome/browser/policy/configuration_policy_provider.cc
index 4979abf875e18789ee5f8f65ac5391c1feffc114..435fb9b8273c7b156f7c4a410ff3b3e4be501028 100644
--- a/chrome/browser/policy/configuration_policy_provider.cc
+++ b/chrome/browser/policy/configuration_policy_provider.cc
@@ -4,7 +4,7 @@
#include "chrome/browser/policy/configuration_policy_provider.h"
-#include <algorithm>
+#include <string>
#include "chrome/browser/policy/policy_map.h"
#include "policy/policy_constants.h"
@@ -42,11 +42,8 @@ ConfigurationPolicyProvider::~ConfigurationPolicyProvider() {
}
bool ConfigurationPolicyProvider::Provide(PolicyMap* result) {
- if (ProvideInternal(result)) {
- FixDeprecatedPolicies(result);
- return true;
- }
- return false;
+ result->CopyFrom(policy_bundle_.Get(POLICY_DOMAIN_CHROME, std::string()));
+ return true;
}
bool ConfigurationPolicyProvider::IsInitializationComplete() const {
@@ -92,7 +89,11 @@ void ConfigurationPolicyProvider::FixDeprecatedPolicies(PolicyMap* policies) {
}
}
-void ConfigurationPolicyProvider::NotifyPolicyUpdated() {
+void ConfigurationPolicyProvider::UpdatePolicy(
+ scoped_ptr<PolicyBundle> bundle) {
+ policy_bundle_.Swap(bundle.get());
+ FixDeprecatedPolicies(
+ &policy_bundle_.Get(POLICY_DOMAIN_CHROME, std::string()));
FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer,
observer_list_,
OnUpdatePolicy(this));
@@ -111,13 +112,17 @@ ConfigurationPolicyObserverRegistrar::ConfigurationPolicyObserverRegistrar()
observer_(NULL) {}
ConfigurationPolicyObserverRegistrar::~ConfigurationPolicyObserverRegistrar() {
- if (provider_)
+ // Subtle: see the comment in OnProviderGoingAway().
+ if (observer_)
provider_->RemoveObserver(this);
}
void ConfigurationPolicyObserverRegistrar::Init(
ConfigurationPolicyProvider* provider,
ConfigurationPolicyProvider::Observer* observer) {
+ // Must be either both NULL or both not NULL.
+ DCHECK(provider);
+ DCHECK(observer);
provider_ = provider;
observer_ = observer;
provider_->AddObserver(this);
@@ -132,11 +137,16 @@ void ConfigurationPolicyObserverRegistrar::OnUpdatePolicy(
void ConfigurationPolicyObserverRegistrar::OnProviderGoingAway(
ConfigurationPolicyProvider* provider) {
DCHECK_EQ(provider_, provider);
- // The |observer_| might delete |this| during this callback. Don't touch any
+ // The |observer_| might delete |this| during this callback: don't touch any
// of |this| field's after it returns.
+ // It might also invoke provider() during this callback, so |provider_| can't
+ // be set to NULL. So we set |observer_| to NULL instead to signal that
+ // we're not observing the provider anymore.
+ ConfigurationPolicyProvider::Observer* observer = observer_;
+ observer_ = NULL;
provider_->RemoveObserver(this);
- provider_ = NULL;
- observer_->OnProviderGoingAway(provider);
+
+ observer->OnProviderGoingAway(provider);
}
} // namespace policy
« no previous file with comments | « chrome/browser/policy/configuration_policy_provider.h ('k') | chrome/browser/policy/mock_configuration_policy_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698