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 ae4ae9b313c0bb44231543f6e4ce48f63e9a3d8c..8134e42a96d6a97cd43a43d1dcb85ef31867e011 100644 |
--- a/components/signin/core/browser/account_tracker_service.cc |
+++ b/components/signin/core/browser/account_tracker_service.cc |
@@ -442,3 +442,44 @@ void AccountTrackerService::LoadFromTokenService() { |
OnRefreshTokenAvailable(*it); |
} |
} |
+ |
+std::string AccountTrackerService::PickAccountIdForAccount( |
+ const std::string& gaia_id, |
+ const std::string& email) { |
+ return PickAccountIdForAccount(pref_service_, gaia_id, email); |
+} |
+ |
+// static |
+std::string AccountTrackerService::PickAccountIdForAccount( |
+ PrefService* pref_service, |
+ const std::string& gaia_id, |
+ const std::string& email) { |
+ DCHECK(!gaia_id.empty()); |
+ DCHECK(!email.empty()); |
+ switch(GetMigrationState(pref_service)) { |
+ case MIGRATION_NOT_STARTED: |
+ case MIGRATION_IN_PROGRESS: |
+ return email; |
+ case MIGRATION_DONE: |
+ return gaia_id; |
+ default: |
+ NOTREACHED(); |
+ return email; |
+ } |
+} |
+ |
+void AccountTrackerService::SeedAccountInfo(const std::string& account_id, |
+ const std::string& gaia, |
+ const std::string& email) { |
+ DCHECK(!account_id.empty()); |
+ DCHECK(!gaia.empty()); |
+ DCHECK(!email.empty()); |
+ bool already_exists = ContainsKey(accounts_, account_id); |
+ StartTrackingAccount(account_id); |
+ AccountState& state = accounts_[account_id]; |
+ DCHECK(!already_exists || state.info.gaia == gaia); |
+ state.info.gaia = gaia; |
+ state.info.email = email; |
+ SaveToPrefs(state); |
+ |
+} |