Index: chrome/browser/policy/device_management_policy_provider.cc |
diff --git a/chrome/browser/policy/device_management_policy_provider.cc b/chrome/browser/policy/device_management_policy_provider.cc |
index f19156441e51dd1690269ed6149dae4f892b88f6..644f532f35f7df86044afcf2a39c0fc3c3eae95d 100644 |
--- a/chrome/browser/policy/device_management_policy_provider.cc |
+++ b/chrome/browser/policy/device_management_policy_provider.cc |
@@ -108,14 +108,21 @@ void DeviceManagementPolicyProvider::HandlePolicyResponse( |
void DeviceManagementPolicyProvider::OnError( |
DeviceManagementBackend::ErrorCode code) { |
policy_request_pending_ = false; |
- LOG(WARNING) << "Could not provide policy from the device manager (error = " |
- << code << "), will retry in " |
- << (policy_refresh_error_delay_ms_/1000) << " seconds."; |
- ScheduleRefreshTask(policy_refresh_error_delay_ms_); |
- policy_refresh_error_delay_ms_ *= 2; |
- if (policy_refresh_rate_ms_ && |
- policy_refresh_rate_ms_ < policy_refresh_error_delay_ms_) { |
- policy_refresh_error_delay_ms_ = policy_refresh_rate_ms_; |
+ if (code == DeviceManagementBackend::kErrorServiceDeviceNotFound || |
+ code == DeviceManagementBackend::kErrorServiceManagementTokenInvalid) { |
+ LOG(WARNING) << "The device token was either invalid or unknown to the " |
+ << "device manager, re-registering device."; |
+ token_fetcher_->Restart(); |
+ } else { |
+ LOG(WARNING) << "Could not provide policy from the device manager (error = " |
+ << code << "), will retry in " |
+ << (policy_refresh_error_delay_ms_/1000) << " seconds."; |
+ ScheduleRefreshTask(policy_refresh_error_delay_ms_); |
+ policy_refresh_error_delay_ms_ *= 2; |
+ if (policy_refresh_rate_ms_ && |
+ policy_refresh_rate_ms_ < policy_refresh_error_delay_ms_) { |
+ policy_refresh_error_delay_ms_ = policy_refresh_rate_ms_; |
+ } |
} |
} |