Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/signin/core/browser/account_tracker_service.h" | 5 #include "components/signin/core/browser/account_tracker_service.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 const char kAccountKeyPath[] = "account_id"; | 27 const char kAccountKeyPath[] = "account_id"; |
| 28 const char kAccountEmailPath[] = "email"; | 28 const char kAccountEmailPath[] = "email"; |
| 29 const char kAccountGaiaPath[] = "gaia"; | 29 const char kAccountGaiaPath[] = "gaia"; |
| 30 const char kAccountHostedDomainPath[] = "hd"; | 30 const char kAccountHostedDomainPath[] = "hd"; |
| 31 const char kAccountFullNamePath[] = "full_name"; | 31 const char kAccountFullNamePath[] = "full_name"; |
| 32 const char kAccountGivenNamePath[] = "given_name"; | 32 const char kAccountGivenNamePath[] = "given_name"; |
| 33 const char kAccountLocalePath[] = "locale"; | 33 const char kAccountLocalePath[] = "locale"; |
| 34 const char kAccountPictureURLPath[] = "picture_url"; | |
| 34 | 35 |
| 35 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 36 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 36 // IsRefreshTokenDeviceIdExperimentEnabled is called from | 37 // IsRefreshTokenDeviceIdExperimentEnabled is called from |
| 37 // SendRefreshTokenAnnotationRequest only on desktop platforms. | 38 // SendRefreshTokenAnnotationRequest only on desktop platforms. |
| 38 bool IsRefreshTokenDeviceIdExperimentEnabled() { | 39 bool IsRefreshTokenDeviceIdExperimentEnabled() { |
| 39 const std::string group_name = | 40 const std::string group_name = |
| 40 base::FieldTrialList::FindFullName("RefreshTokenDeviceId"); | 41 base::FieldTrialList::FindFullName("RefreshTokenDeviceId"); |
| 41 return group_name == "Enabled"; | 42 return group_name == "Enabled"; |
| 42 } | 43 } |
| 43 #endif | 44 #endif |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 "OnNetworkError", | 163 "OnNetworkError", |
| 163 "response_code", | 164 "response_code", |
| 164 response_code); | 165 response_code); |
| 165 LOG(ERROR) << "OnNetworkError " << response_code; | 166 LOG(ERROR) << "OnNetworkError " << response_code; |
| 166 service_->OnUserInfoFetchFailure(this); | 167 service_->OnUserInfoFetchFailure(this); |
| 167 } | 168 } |
| 168 | 169 |
| 169 AccountTrackerService::AccountInfo::AccountInfo() {} | 170 AccountTrackerService::AccountInfo::AccountInfo() {} |
| 170 AccountTrackerService::AccountInfo::~AccountInfo() {} | 171 AccountTrackerService::AccountInfo::~AccountInfo() {} |
| 171 | 172 |
| 172 bool AccountTrackerService::AccountInfo::IsValid() { | 173 bool AccountTrackerService::AccountInfo::IsValid() const { |
| 173 return !account_id.empty() && !email.empty() && !gaia.empty() && | 174 return !account_id.empty() && !email.empty() && !gaia.empty() && |
| 174 !hosted_domain.empty() && !full_name.empty() && !given_name.empty() && | 175 !hosted_domain.empty() && !full_name.empty() && !given_name.empty() && |
| 175 !locale.empty(); | 176 !locale.empty() && !picture_url.empty(); |
| 176 } | 177 } |
| 177 | 178 |
| 178 | 179 |
| 179 const char AccountTrackerService::kAccountInfoPref[] = "account_info"; | 180 const char AccountTrackerService::kAccountInfoPref[] = "account_info"; |
| 180 | 181 |
| 181 AccountTrackerService::AccountTrackerService() | 182 AccountTrackerService::AccountTrackerService() |
| 182 : token_service_(NULL), | 183 : token_service_(NULL), |
| 183 signin_client_(NULL), | 184 signin_client_(NULL), |
| 184 shutdown_called_(false), | 185 shutdown_called_(false), |
| 185 network_fetches_enabled_(false) { | 186 network_fetches_enabled_(false) { |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 std::string hosted_domain; | 421 std::string hosted_domain; |
| 421 if (user_info->GetString("hd", &hosted_domain) && !hosted_domain.empty()) { | 422 if (user_info->GetString("hd", &hosted_domain) && !hosted_domain.empty()) { |
| 422 state.info.hosted_domain = hosted_domain; | 423 state.info.hosted_domain = hosted_domain; |
| 423 } else { | 424 } else { |
| 424 state.info.hosted_domain = kNoHostedDomainFound; | 425 state.info.hosted_domain = kNoHostedDomainFound; |
| 425 } | 426 } |
| 426 | 427 |
| 427 user_info->GetString("name", &state.info.full_name); | 428 user_info->GetString("name", &state.info.full_name); |
| 428 user_info->GetString("given_name", &state.info.given_name); | 429 user_info->GetString("given_name", &state.info.given_name); |
| 429 user_info->GetString("locale", &state.info.locale); | 430 user_info->GetString("locale", &state.info.locale); |
| 431 user_info->GetString("picture", &state.info.picture_url); | |
| 430 | 432 |
| 431 NotifyAccountUpdated(state); | 433 NotifyAccountUpdated(state); |
| 432 SaveToPrefs(state); | 434 SaveToPrefs(state); |
| 433 } | 435 } |
| 434 } | 436 } |
| 435 | 437 |
| 436 void AccountTrackerService::OnUserInfoFetchSuccess( | 438 void AccountTrackerService::OnUserInfoFetchSuccess( |
| 437 AccountInfoFetcher* fetcher, | 439 AccountInfoFetcher* fetcher, |
| 438 const base::DictionaryValue* user_info) { | 440 const base::DictionaryValue* user_info) { |
| 439 const std::string& account_id = fetcher->account_id(); | 441 const std::string& account_id = fetcher->account_id(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 477 if (dict->GetString(kAccountEmailPath, &value)) | 479 if (dict->GetString(kAccountEmailPath, &value)) |
| 478 state.info.email = base::UTF16ToUTF8(value); | 480 state.info.email = base::UTF16ToUTF8(value); |
| 479 if (dict->GetString(kAccountHostedDomainPath, &value)) | 481 if (dict->GetString(kAccountHostedDomainPath, &value)) |
| 480 state.info.hosted_domain = base::UTF16ToUTF8(value); | 482 state.info.hosted_domain = base::UTF16ToUTF8(value); |
| 481 if (dict->GetString(kAccountFullNamePath, &value)) | 483 if (dict->GetString(kAccountFullNamePath, &value)) |
| 482 state.info.full_name = base::UTF16ToUTF8(value); | 484 state.info.full_name = base::UTF16ToUTF8(value); |
| 483 if (dict->GetString(kAccountGivenNamePath, &value)) | 485 if (dict->GetString(kAccountGivenNamePath, &value)) |
| 484 state.info.given_name = base::UTF16ToUTF8(value); | 486 state.info.given_name = base::UTF16ToUTF8(value); |
| 485 if (dict->GetString(kAccountLocalePath, &value)) | 487 if (dict->GetString(kAccountLocalePath, &value)) |
| 486 state.info.locale = base::UTF16ToUTF8(value); | 488 state.info.locale = base::UTF16ToUTF8(value); |
| 489 if (dict->GetString(kAccountPictureURLPath, &value)) | |
|
Mike Lerman
2015/04/20 13:25:23
Roger: Does every account HAVE a picture? What if
Roger Tawa OOO till Jul 10th
2015/04/21 14:00:34
That's a good question, don't have the answer. If
anthonyvd
2015/04/29 15:15:08
Done.
| |
| 490 state.info.picture_url = base::UTF16ToUTF8(value); | |
| 487 if (state.info.IsValid()) | 491 if (state.info.IsValid()) |
| 488 NotifyAccountUpdated(state); | 492 NotifyAccountUpdated(state); |
| 489 } | 493 } |
| 490 } | 494 } |
| 491 } | 495 } |
| 492 } | 496 } |
| 493 | 497 |
| 494 void AccountTrackerService::SaveToPrefs(const AccountState& state) { | 498 void AccountTrackerService::SaveToPrefs(const AccountState& state) { |
| 495 if (!signin_client_->GetPrefs()) | 499 if (!signin_client_->GetPrefs()) |
| 496 return; | 500 return; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 511 update->Append(dict); // |update| takes ownership. | 515 update->Append(dict); // |update| takes ownership. |
| 512 dict->SetString(kAccountKeyPath, account_id_16); | 516 dict->SetString(kAccountKeyPath, account_id_16); |
| 513 } | 517 } |
| 514 | 518 |
| 515 dict->SetString(kAccountEmailPath, state.info.email); | 519 dict->SetString(kAccountEmailPath, state.info.email); |
| 516 dict->SetString(kAccountGaiaPath, state.info.gaia); | 520 dict->SetString(kAccountGaiaPath, state.info.gaia); |
| 517 dict->SetString(kAccountHostedDomainPath, state.info.hosted_domain); | 521 dict->SetString(kAccountHostedDomainPath, state.info.hosted_domain); |
| 518 dict->SetString(kAccountFullNamePath, state.info.full_name); | 522 dict->SetString(kAccountFullNamePath, state.info.full_name); |
| 519 dict->SetString(kAccountGivenNamePath, state.info.given_name); | 523 dict->SetString(kAccountGivenNamePath, state.info.given_name); |
| 520 dict->SetString(kAccountLocalePath, state.info.locale); | 524 dict->SetString(kAccountLocalePath, state.info.locale); |
| 525 dict->SetString(kAccountPictureURLPath, state.info.picture_url); | |
| 521 } | 526 } |
| 522 | 527 |
| 523 void AccountTrackerService::RemoveFromPrefs(const AccountState& state) { | 528 void AccountTrackerService::RemoveFromPrefs(const AccountState& state) { |
| 524 if (!signin_client_->GetPrefs()) | 529 if (!signin_client_->GetPrefs()) |
| 525 return; | 530 return; |
| 526 | 531 |
| 527 base::string16 account_id_16 = base::UTF8ToUTF16(state.info.account_id); | 532 base::string16 account_id_16 = base::UTF8ToUTF16(state.info.account_id); |
| 528 ListPrefUpdate update(signin_client_->GetPrefs(), kAccountInfoPref); | 533 ListPrefUpdate update(signin_client_->GetPrefs(), kAccountInfoPref); |
| 529 for(size_t i = 0; i < update->GetSize(); ++i) { | 534 for(size_t i = 0; i < update->GetSize(); ++i) { |
| 530 base::DictionaryValue* dict = NULL; | 535 base::DictionaryValue* dict = NULL; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 611 DCHECK(!email.empty()); | 616 DCHECK(!email.empty()); |
| 612 const std::string account_id = PickAccountIdForAccount(gaia, email); | 617 const std::string account_id = PickAccountIdForAccount(gaia, email); |
| 613 const bool already_exists = ContainsKey(accounts_, account_id); | 618 const bool already_exists = ContainsKey(accounts_, account_id); |
| 614 StartTrackingAccount(account_id); | 619 StartTrackingAccount(account_id); |
| 615 AccountState& state = accounts_[account_id]; | 620 AccountState& state = accounts_[account_id]; |
| 616 DCHECK(!already_exists || state.info.gaia == gaia); | 621 DCHECK(!already_exists || state.info.gaia == gaia); |
| 617 state.info.gaia = gaia; | 622 state.info.gaia = gaia; |
| 618 state.info.email = email; | 623 state.info.email = email; |
| 619 SaveToPrefs(state); | 624 SaveToPrefs(state); |
| 620 } | 625 } |
| OLD | NEW |