Index: remoting/host/policy_hack/policy_watcher.cc |
diff --git a/remoting/host/policy_hack/policy_watcher.cc b/remoting/host/policy_hack/policy_watcher.cc |
index 8e30c241ae98da24b25d1da2d87a6db6c3dabfcd..d0f59572c31ed2480d409bea355a8b5e68d89515 100644 |
--- a/remoting/host/policy_hack/policy_watcher.cc |
+++ b/remoting/host/policy_hack/policy_watcher.cc |
@@ -118,6 +118,7 @@ const char PolicyWatcher::kHostDebugOverridePoliciesName[] = |
PolicyWatcher::PolicyWatcher( |
scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
: task_runner_(task_runner), |
+ transient_policy_error_retry_counter_(0), |
old_policies_(new base::DictionaryValue()), |
default_values_(new base::DictionaryValue()), |
weak_factory_(this) { |
@@ -151,16 +152,20 @@ PolicyWatcher::PolicyWatcher( |
PolicyWatcher::~PolicyWatcher() { |
} |
-void PolicyWatcher::StartWatching(const PolicyCallback& policy_callback) { |
+void PolicyWatcher::StartWatching( |
+ const PolicyUpdatedCallback& policy_updated_callback, |
+ const PolicyErrorCallback& policy_error_callback) { |
if (!OnPolicyWatcherThread()) { |
task_runner_->PostTask(FROM_HERE, |
base::Bind(&PolicyWatcher::StartWatching, |
base::Unretained(this), |
- policy_callback)); |
+ policy_updated_callback, |
+ policy_error_callback)); |
return; |
} |
- policy_callback_ = policy_callback; |
+ policy_updated_callback_ = policy_updated_callback; |
+ policy_error_callback_ = policy_error_callback; |
StartWatchingInternal(); |
} |
@@ -174,7 +179,8 @@ void PolicyWatcher::StopWatching(const base::Closure& stopped_callback) { |
void PolicyWatcher::StopWatchingOnPolicyWatcherThread() { |
StopWatchingInternal(); |
weak_factory_.InvalidateWeakPtrs(); |
- policy_callback_.Reset(); |
+ policy_updated_callback_.Reset(); |
+ policy_error_callback_.Reset(); |
} |
void PolicyWatcher::ScheduleFallbackReloadTask() { |
@@ -203,6 +209,8 @@ void PolicyWatcher::UpdatePolicies( |
const base::DictionaryValue* new_policies_raw) { |
DCHECK(OnPolicyWatcherThread()); |
+ transient_policy_error_retry_counter_ = 0; |
+ |
// Use default values for any missing policies. |
scoped_ptr<base::DictionaryValue> new_policies = |
CopyGoodValuesAndAddDefaults( |
@@ -226,7 +234,20 @@ void PolicyWatcher::UpdatePolicies( |
// Notify our client of the changed policies. |
if (!changed_policies->empty()) { |
- policy_callback_.Run(changed_policies.Pass()); |
+ policy_updated_callback_.Run(changed_policies.Pass()); |
+ } |
+} |
+ |
+void PolicyWatcher::SignalPolicyError() { |
+ transient_policy_error_retry_counter_ = 0; |
+ policy_error_callback_.Run(); |
+} |
+ |
+void PolicyWatcher::SignalTransientPolicyError() { |
+ const int kMaxRetryCount = 5; |
+ transient_policy_error_retry_counter_ += 1; |
+ if (transient_policy_error_retry_counter_ >= kMaxRetryCount) { |
+ SignalPolicyError(); |
} |
} |