Index: chrome/browser/policy/device_token_fetcher.cc |
diff --git a/chrome/browser/policy/device_token_fetcher.cc b/chrome/browser/policy/device_token_fetcher.cc |
index 2d514b603aae312e454ad2f1e5247e9f01e418c7..3f977c1a25ccfdbc754e1f8d841cda5ccd9bb9fc 100644 |
--- a/chrome/browser/policy/device_token_fetcher.cc |
+++ b/chrome/browser/policy/device_token_fetcher.cc |
@@ -65,6 +65,7 @@ DeviceTokenFetcher::ObserverRegistrar::~ObserverRegistrar() { |
void DeviceTokenFetcher::ObserverRegistrar::Init( |
DeviceTokenFetcher* token_fetcher) { |
+ RemoveAll(); |
token_fetcher_ = token_fetcher; |
} |
@@ -192,7 +193,11 @@ void DeviceTokenFetcher::OnError(DeviceManagementBackend::ErrorCode code) { |
} |
void DeviceTokenFetcher::Restart() { |
- DCHECK(!IsTokenPending()); |
+ // Complain if there's currently an asynchronous operation going on. |
+ DCHECK(state_ == kStateNotStarted || |
+ state_ == kStateHasDeviceToken || |
+ state_ == kStateFailure || |
+ state_ == kStateNotManaged); |
device_token_.clear(); |
device_token_load_complete_event_.Reset(); |
MakeReadyToRequestDeviceToken(); |