| Index: components/signin/core/browser/account_tracker_service.cc
|
| diff --git a/components/signin/core/browser/account_tracker_service.cc b/components/signin/core/browser/account_tracker_service.cc
|
| index ec24462d4e8090dbceb4aae3ce281b11efa31d5c..dfa43a80c5fc3e7ae0fa53997ae631435e93a3c8 100644
|
| --- a/components/signin/core/browser/account_tracker_service.cc
|
| +++ b/components/signin/core/browser/account_tracker_service.cc
|
| @@ -31,6 +31,7 @@ const char kAccountHostedDomainPath[] = "hd";
|
| const char kAccountFullNamePath[] = "full_name";
|
| const char kAccountGivenNamePath[] = "given_name";
|
| const char kAccountLocalePath[] = "locale";
|
| +const char kAccountPictureURLPath[] = "picture_url";
|
|
|
| const base::TimeDelta kRefreshFromTokenServiceDelay =
|
| base::TimeDelta::FromHours(24);
|
| @@ -49,6 +50,9 @@ bool IsRefreshTokenDeviceIdExperimentEnabled() {
|
| // This must be a string which can never be a valid domain.
|
| const char AccountTrackerService::kNoHostedDomainFound[] = "NO_HOSTED_DOMAIN";
|
|
|
| +// This must be a string which can never be a valid picture URL.
|
| +const char AccountTrackerService::kNoPictureURLFound[] = "NO_PICTURE_URL";
|
| +
|
| class AccountInfoFetcher : public OAuth2TokenService::Consumer,
|
| public gaia::GaiaOAuthClient::Delegate {
|
| public:
|
| @@ -172,10 +176,10 @@ void AccountInfoFetcher::OnNetworkError(int response_code) {
|
| AccountTrackerService::AccountInfo::AccountInfo() {}
|
| AccountTrackerService::AccountInfo::~AccountInfo() {}
|
|
|
| -bool AccountTrackerService::AccountInfo::IsValid() {
|
| +bool AccountTrackerService::AccountInfo::IsValid() const {
|
| return !account_id.empty() && !email.empty() && !gaia.empty() &&
|
| !hosted_domain.empty() && !full_name.empty() && !given_name.empty() &&
|
| - !locale.empty();
|
| + !locale.empty() && !picture_url.empty();
|
| }
|
|
|
|
|
| @@ -461,6 +465,13 @@ void AccountTrackerService::SetAccountStateFromUserInfo(
|
| user_info->GetString("given_name", &state.info.given_name);
|
| user_info->GetString("locale", &state.info.locale);
|
|
|
| + std::string picture_url;
|
| + if(user_info->GetString("picture", &picture_url)) {
|
| + state.info.picture_url = picture_url;
|
| + } else {
|
| + state.info.picture_url = kNoPictureURLFound;
|
| + }
|
| +
|
| NotifyAccountUpdated(state);
|
| SaveToPrefs(state);
|
| }
|
| @@ -516,6 +527,8 @@ void AccountTrackerService::LoadFromPrefs() {
|
| state.info.given_name = base::UTF16ToUTF8(value);
|
| if (dict->GetString(kAccountLocalePath, &value))
|
| state.info.locale = base::UTF16ToUTF8(value);
|
| + if (dict->GetString(kAccountPictureURLPath, &value))
|
| + state.info.picture_url = base::UTF16ToUTF8(value);
|
| if (state.info.IsValid())
|
| NotifyAccountUpdated(state);
|
| }
|
| @@ -552,6 +565,7 @@ void AccountTrackerService::SaveToPrefs(const AccountState& state) {
|
| dict->SetString(kAccountFullNamePath, state.info.full_name);
|
| dict->SetString(kAccountGivenNamePath, state.info.given_name);
|
| dict->SetString(kAccountLocalePath, state.info.locale);
|
| + dict->SetString(kAccountPictureURLPath, state.info.picture_url);
|
| }
|
|
|
| void AccountTrackerService::RemoveFromPrefs(const AccountState& state) {
|
| @@ -679,3 +693,22 @@ std::string AccountTrackerService::SeedAccountInfo(const std::string& gaia,
|
|
|
| return account_id;
|
| }
|
| +
|
| +void AccountTrackerService::SeedAccountInfo(
|
| + AccountTrackerService::AccountInfo info) {
|
| + info.account_id = PickAccountIdForAccount(info.gaia, info.email);
|
| + if (info.hosted_domain.empty()) {
|
| + info.hosted_domain = kNoHostedDomainFound;
|
| + }
|
| +
|
| + if(info.IsValid()) {
|
| + if(!ContainsKey(accounts_, info.account_id)) {
|
| + SeedAccountInfo(info.gaia, info.email);
|
| + }
|
| +
|
| + AccountState& state = accounts_[info.account_id];
|
| + state.info = info;
|
| + NotifyAccountUpdated(state);
|
| + SaveToPrefs(state);
|
| + }
|
| +}
|
|
|