| 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 e603cf5032459caaea20f88d40671df5d4aaa0cc..a606376912408675acc25465f1e81958bf841ccd 100644
|
| --- a/remoting/host/policy_hack/policy_watcher.cc
|
| +++ b/remoting/host/policy_hack/policy_watcher.cc
|
| @@ -119,6 +119,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) {
|
| @@ -152,16 +153,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();
|
| }
|
|
|
| @@ -175,7 +180,8 @@ void PolicyWatcher::StopWatching(base::WaitableEvent* done) {
|
|
|
| StopWatchingInternal();
|
| weak_factory_.InvalidateWeakPtrs();
|
| - policy_callback_.Reset();
|
| + policy_updated_callback_.Reset();
|
| + policy_error_callback_.Reset();
|
|
|
| done->Signal();
|
| }
|
| @@ -206,6 +212,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(
|
| @@ -229,7 +237,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();
|
| }
|
| }
|
|
|
|
|