Index: chrome/browser/policy/cloud/cloud_policy_manager.cc |
diff --git a/chrome/browser/policy/cloud/cloud_policy_manager.cc b/chrome/browser/policy/cloud/cloud_policy_manager.cc |
index 4c704ba0cb741f0c5a81e7cb95e641a9eaa3f993..f3af3c93b9486583647435d595aac9285bdb66b4 100644 |
--- a/chrome/browser/policy/cloud/cloud_policy_manager.cc |
+++ b/chrome/browser/policy/cloud/cloud_policy_manager.cc |
@@ -18,7 +18,8 @@ namespace policy { |
CloudPolicyManager::CloudPolicyManager(const PolicyNamespaceKey& policy_ns_key, |
CloudPolicyStore* cloud_policy_store) |
: core_(policy_ns_key, cloud_policy_store), |
- waiting_for_policy_refresh_(false) { |
+ waiting_for_policy_refresh_(false), |
+ invalidator_started_(false) { |
store()->AddObserver(this); |
// If the underlying store is already initialized, publish the loaded |
@@ -31,17 +32,13 @@ CloudPolicyManager::CloudPolicyManager(const PolicyNamespaceKey& policy_ns_key, |
CloudPolicyManager::~CloudPolicyManager() {} |
-void CloudPolicyManager::EnableInvalidations( |
- const base::Closure& initialize_invalidator) { |
- DCHECK(!initialize_invalidator.is_null()); |
- DCHECK(initialize_invalidator_.is_null()); |
- // If the refresh scheduler is already running, initialize the invalidator |
- // right away. Otherwise, store the closure so it can be invoked when the |
- // refresh scheduler starts. |
- if (core()->refresh_scheduler()) |
- initialize_invalidator.Run(); |
- else |
- initialize_invalidator_ = initialize_invalidator; |
+void CloudPolicyManager::SetInvalidator( |
+ const base::WeakPtr<CloudPolicyInvalidator>& invalidator) { |
+ DCHECK(invalidator); |
+ invalidator_ = invalidator; |
+ // Start the invalidator if StartInvalidator was already called. |
+ if (invalidator_started_) |
+ invalidator_->Start(); |
} |
void CloudPolicyManager::Shutdown() { |
@@ -105,12 +102,22 @@ void CloudPolicyManager::CheckAndPublishPolicy() { |
} |
} |
-void CloudPolicyManager::StartRefreshScheduler() { |
- DCHECK(!core()->refresh_scheduler()); |
- core()->StartRefreshScheduler(); |
- // Initialize the invalidator if EnableInvalidations has been called. |
- if (!initialize_invalidator_.is_null()) |
- initialize_invalidator_.Run(); |
+void CloudPolicyManager::StartInvalidator() { |
+ DCHECK(core()->refresh_scheduler()); |
+ invalidator_started_ = true; |
+ CloudPolicyInvalidator* invalidator = invalidator_.get(); |
+ if (invalidator) |
+ invalidator->Start(); |
+} |
+ |
+void CloudPolicyManager::StopInvalidator() { |
+ if (invalidator_started_) { |
+ DCHECK(core()->refresh_scheduler()); |
+ invalidator_started_ = false; |
+ CloudPolicyInvalidator* invalidator = invalidator_.get(); |
+ if (invalidator) |
+ invalidator->Stop(); |
+ } |
} |
scoped_ptr<PolicyBundle> CloudPolicyManager::CreatePolicyBundle() { |