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 982d86f3792e4600c35c0423e268145e376a18fa..1952747394c6fbb36c3c29e0147414f002e2f15f 100644 |
--- a/chrome/browser/policy/device_token_fetcher.cc |
+++ b/chrome/browser/policy/device_token_fetcher.cc |
@@ -23,18 +23,21 @@ namespace em = enterprise_management; |
DeviceTokenFetcher::DeviceTokenFetcher( |
DeviceManagementBackend* backend, |
+ TokenService* token_service, |
const FilePath& token_path) |
: token_path_(token_path), |
backend_(backend), |
+ token_service_(token_service), |
state_(kStateNotStarted), |
device_token_load_complete_event_(true, false) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- // The token fetcher gets initialized AuthTokens for the device management |
- // server are available. Install a notification observer to ensure that the |
- // device management token gets fetched after the AuthTokens are available. |
+ |
+ auth_token_ = token_service_->GetTokenForService( |
+ GaiaConstants::kDeviceManagementService); |
+ |
registrar_.Add(this, |
NotificationType::TOKEN_AVAILABLE, |
- NotificationService::AllSources()); |
+ Source<TokenService>(token_service_)); |
} |
void DeviceTokenFetcher::Observe(NotificationType type, |
@@ -42,13 +45,14 @@ void DeviceTokenFetcher::Observe(NotificationType type, |
const NotificationDetails& details) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (type == NotificationType::TOKEN_AVAILABLE) { |
- const Source<TokenService> token_service(source); |
- const TokenService::TokenAvailableDetails* token_details = |
- Details<const TokenService::TokenAvailableDetails>(details).ptr(); |
- if (token_details->service() == GaiaConstants::kDeviceManagementService) { |
- if (!HasAuthToken()) { |
- auth_token_ = token_details->token(); |
- SendServerRequestIfPossible(); |
+ if (Source<TokenService>(source).ptr() == token_service_) { |
+ const TokenService::TokenAvailableDetails* token_details = |
+ Details<const TokenService::TokenAvailableDetails>(details).ptr(); |
+ if (token_details->service() == GaiaConstants::kDeviceManagementService) { |
+ if (!HasAuthToken()) { |
+ auth_token_ = token_details->token(); |
+ SendServerRequestIfPossible(); |
+ } |
} |
} |
} else { |
@@ -102,6 +106,11 @@ void DeviceTokenFetcher::StartFetching() { |
} |
} |
+void DeviceTokenFetcher::Shutdown() { |
+ token_service_ = NULL; |
+ backend_ = NULL; |
+} |
+ |
void DeviceTokenFetcher::AttemptTokenLoadFromDisk() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
if (file_util::PathExists(token_path_)) { |
@@ -139,7 +148,8 @@ void DeviceTokenFetcher::MakeReadyToRequestDeviceToken() { |
void DeviceTokenFetcher::SendServerRequestIfPossible() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (state_ == kStateReadyToRequestDeviceTokenFromServer |
- && HasAuthToken()) { |
+ && HasAuthToken() |
+ && backend_) { |
em::DeviceRegisterRequest register_request; |
SetState(kStateRequestingDeviceTokenFromServer); |
backend_->ProcessRegisterRequest(auth_token_, |