Index: components/signin/core/browser/account_fetcher_service.cc |
diff --git a/components/signin/core/browser/account_fetcher_service.cc b/components/signin/core/browser/account_fetcher_service.cc |
index 22c804f6b496723a0a935e75abe82b37765e7d51..b7b0ad798276c2fc0f40e73a8c8a9d9a89355da8 100644 |
--- a/components/signin/core/browser/account_fetcher_service.cc |
+++ b/components/signin/core/browser/account_fetcher_service.cc |
@@ -11,6 +11,7 @@ |
#include "base/trace_event/trace_event.h" |
#include "components/pref_registry/pref_registry_syncable.h" |
#include "components/signin/core/browser/account_info_fetcher.h" |
+#include "components/signin/core/browser/account_seeding_tracker.h" |
#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/signin/core/browser/child_account_info_fetcher.h" |
#include "components/signin/core/browser/refresh_token_annotation_request.h" |
@@ -55,7 +56,8 @@ AccountFetcherService::AccountFetcherService() |
invalidation_service_(nullptr), |
network_fetches_enabled_(false), |
shutdown_called_(false), |
- child_info_request_(nullptr) {} |
+ child_info_request_(nullptr), |
+ account_seeding_tracker_(nullptr) {} |
AccountFetcherService::~AccountFetcherService() { |
DCHECK(shutdown_called_); |
@@ -79,6 +81,8 @@ void AccountFetcherService::Initialize( |
DCHECK(account_tracker_service); |
DCHECK(!account_tracker_service_); |
account_tracker_service_ = account_tracker_service; |
+ account_seeding_tracker_.reset( |
+ new AccountSeedingTracker(account_tracker_service)); |
DCHECK(token_service); |
DCHECK(!token_service_); |
token_service_ = token_service; |
@@ -122,6 +126,20 @@ void AccountFetcherService::FetchUserInfoBeforeSignin( |
RefreshAccountInfo(account_id, false); |
} |
+#if defined(OS_ANDROID) |
+void AccountFetcherService::OnAccountsSeeded() { |
+ std::vector<std::string> newly_seeded_acounts( |
+ account_seeding_tracker_->GetNewlySeededAccounts()); |
+ for (const std::string& account : newly_seeded_acounts) |
+ StartFetchingUserInfo(account); |
+ UpdateChildInfo(); |
+} |
+ |
+bool AccountFetcherService::AreAllAccountsSeeded() { |
+ return account_seeding_tracker_->AreAllAccountsSeeded(); |
+} |
+#endif |
+ |
void AccountFetcherService::RefreshAllAccountInfo(bool only_fetch_if_invalid) { |
std::vector<std::string> accounts = token_service_->GetAccounts(); |
for (std::vector<std::string>::const_iterator it = accounts.begin(); |
@@ -146,6 +164,8 @@ void AccountFetcherService::UpdateChildInfo() { |
ResetChildInfo(); |
if (!AccountSupportsUserInfo(candidate)) |
return; |
+ if (!account_seeding_tracker_->IsAccountSeeded(candidate)) |
+ return; |
child_request_account_id_ = candidate; |
StartFetchingChildInfo(candidate); |
} else { |
@@ -184,6 +204,8 @@ void AccountFetcherService::StartFetchingUserInfo( |
pending_user_info_fetches_.push_back(account_id); |
return; |
} |
+ if (!account_seeding_tracker_->IsAccountSeeded(account_id)) |
+ return; |
if (!ContainsKey(user_info_requests_, account_id)) { |
DVLOG(1) << "StartFetching " << account_id; |