| 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();
|
| }
|
| }
|
|
|
|
|