Chromium Code Reviews| Index: chrome/browser/chromeos/settings/device_oauth2_token_service.cc |
| diff --git a/chrome/browser/chromeos/settings/device_oauth2_token_service.cc b/chrome/browser/chromeos/settings/device_oauth2_token_service.cc |
| index 041ccb6a9b8eea2dce489baf3e4c81cf4c115b26..baf6b8052317a6ce264af7b471860968ea4130d9 100644 |
| --- a/chrome/browser/chromeos/settings/device_oauth2_token_service.cc |
| +++ b/chrome/browser/chromeos/settings/device_oauth2_token_service.cc |
| @@ -8,16 +8,17 @@ |
| #include <vector> |
| #include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/prefs/pref_registry_simple.h" |
| #include "base/prefs/pref_service.h" |
| #include "base/values.h" |
| #include "chrome/browser/browser_process.h" |
| -#include "chrome/browser/chromeos/settings/cros_settings.h" |
| #include "chrome/browser/chromeos/settings/token_encryptor.h" |
| #include "chrome/common/pref_names.h" |
| #include "chromeos/cryptohome/system_salt_getter.h" |
| +#include "chromeos/settings/cros_settings_names.h" |
| #include "google_apis/gaia/gaia_constants.h" |
| #include "google_apis/gaia/gaia_urls.h" |
| #include "google_apis/gaia/google_service_auth_error.h" |
| @@ -42,6 +43,11 @@ struct DeviceOAuth2TokenService::PendingRequest { |
| const ScopeSet scopes; |
| }; |
| +void DeviceOAuth2TokenService::OnServiceAccountIdentityChanged() { |
| + if (!GetRobotAccountId().empty() && !refresh_token_.empty()) |
| + FireRefreshTokenAvailable(GetRobotAccountId()); |
| +} |
| + |
| DeviceOAuth2TokenService::DeviceOAuth2TokenService( |
| net::URLRequestContextGetter* getter, |
| PrefService* local_state) |
| @@ -49,6 +55,12 @@ DeviceOAuth2TokenService::DeviceOAuth2TokenService( |
| local_state_(local_state), |
| state_(STATE_LOADING), |
| max_refresh_token_validation_retries_(3), |
| + service_account_identity_subscription_( |
| + CrosSettings::Get()->AddSettingsObserver( |
| + kServiceAccountIdentity, |
| + base::Bind( |
| + &DeviceOAuth2TokenService::OnServiceAccountIdentityChanged, |
| + base::Unretained(this))).Pass()), |
| weak_ptr_factory_(this) { |
| // Pull in the system salt. |
| SystemSaltGetter::Get()->GetSystemSalt( |
| @@ -75,7 +87,11 @@ void DeviceOAuth2TokenService::SetAndSaveRefreshToken( |
| bool waiting_for_salt = state_ == STATE_LOADING; |
| refresh_token_ = refresh_token; |
| state_ = STATE_VALIDATION_PENDING; |
| - FireRefreshTokenAvailable(GetRobotAccountId()); |
| + |
| + // We cannot announce the token yet because that requires us to also know the |
| + // robot account ID, which is not available yet. It will be done from |
| + // OnServiceAccountIdentityChanged() once the robot account ID becomes |
| + // available. |
|
xiyuan
2015/01/30 18:37:03
Should we call OnServiceAccountIdentityChanged her
bartfab (slow)
2015/02/02 21:01:07
Done.
|
| token_save_callbacks_.push_back(result_callback); |
| if (!waiting_for_salt) { |