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

Unified Diff: chrome/browser/policy/cloud/cloud_policy_manager.cc

Issue 23592017: Fix policy invalidator lifecycle bugs for Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 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/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() {

Powered by Google App Engine
This is Rietveld 408576698