Index: components/signin/core/browser/account_seeding_tracker.cc |
diff --git a/components/signin/core/browser/account_seeding_tracker.cc b/components/signin/core/browser/account_seeding_tracker.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..92fc1a5bb46fa1064b1bf425fbce2e81944e00a9 |
--- /dev/null |
+++ b/components/signin/core/browser/account_seeding_tracker.cc |
@@ -0,0 +1,62 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/signin/core/browser/account_seeding_tracker.h" |
+ |
+#include "base/logging.h" |
+#include "components/signin/core/browser/account_tracker_service.h" |
+ |
+AccountSeedingTracker::AccountSeedingTracker( |
+ const AccountTrackerService* account_tracker_service) { |
+#if defined(OS_ANDROID) |
+ account_tracker_service_ = account_tracker_service; |
+#endif |
+} |
+ |
+AccountSeedingTracker::~AccountSeedingTracker() {} |
+ |
+bool AccountSeedingTracker::IsAccountSeeded(const std::string& account_id) { |
+#if defined(OS_ANDROID) |
+ bool unseeded = |
+ account_tracker_service_->GetAccountInfo(account_id).email.empty(); |
+ if (unseeded) |
+ unseeded_accounts_.push_back(account_id); |
+ return !unseeded; |
+#else |
+ return true; |
+#endif |
+} |
+ |
+std::vector<std::string> AccountSeedingTracker::GetNewlySeededAccounts() { |
+#if defined(OS_ANDROID) |
+ std::vector<std::string> newly_seeded; |
+ unseeded_accounts_.swap(newly_seeded); |
+ DCHECK(AreAllAccountsSeeded()); |
+ // We may have stopped tracking some accounts. |
+ for (std::vector<std::string>::iterator it = newly_seeded.begin(); |
+ it != newly_seeded.end();) { |
+ if (account_tracker_service_->GetAccountInfo(*it).email.empty()) { |
+ it = newly_seeded.erase(it); |
+ } else { |
+ ++it; |
+ } |
+ } |
+ return newly_seeded; |
+#else |
+ NOTREACHED(); |
+ return std::vector<std::string>(); |
+#endif |
+} |
+ |
+bool AccountSeedingTracker::AreAllAccountsSeeded() const { |
+#if defined(OS_ANDROID) |
+ for (const AccountInfo& account : account_tracker_service_->GetAccounts()) { |
+ if (account.email.empty()) |
+ return false; |
+ } |
+#else |
+ NOTREACHED(); |
+#endif |
+ return true; |
+} |