Chromium Code Reviews| Index: chrome/browser/signin/account_reconcilor.cc |
| diff --git a/chrome/browser/signin/account_reconcilor.cc b/chrome/browser/signin/account_reconcilor.cc |
| index 4d2e3e43a88d82417e334418b63bb7fe96eba91e..468241b1591c355021f384c5a954ab54519a9c93 100644 |
| --- a/chrome/browser/signin/account_reconcilor.cc |
| +++ b/chrome/browser/signin/account_reconcilor.cc |
| @@ -362,13 +362,18 @@ void AccountReconcilor::StartRemoveAction(const std::string& account_id) { |
| void AccountReconcilor::FinishRemoveAction( |
| const std::string& account_id, |
| const GoogleServiceAuthError& error, |
| - const std::vector<std::string>& accounts) { |
| + const std::vector<std::pair<std::string, bool> >& accounts) { |
| VLOG(1) << "AccountReconcilor::FinishRemoveAction:" |
| << " account=" << account_id |
| << " error=" << error.ToString(); |
| if (error.state() == GoogleServiceAuthError::NONE) { |
| AbortReconcile(); |
| - merge_session_helper_.LogOut(account_id, accounts); |
| + std::vector<std::string> accounts_only; |
| + for (std::vector<std::pair<std::string, bool> >::const_iterator i = |
|
bartfab (slow)
2014/02/17 15:22:04
Nit: AFAICT, we always call the iterator |it|, not
Roger Tawa OOO till Jul 10th
2014/02/18 19:37:54
I've seen i, it, iter. I think I'll leave it as i
|
| + accounts.begin(); i != accounts.end(); ++i) { |
| + accounts_only.push_back(i->first); |
| + } |
| + merge_session_helper_.LogOut(account_id, accounts_only); |
| } |
| // Wait for the next ReconcileAction if there is an error. |
| } |
| @@ -430,14 +435,14 @@ void AccountReconcilor::OnListAccountsSuccess(const std::string& data) { |
| gaia_fetcher_.reset(); |
| // Get account information from response data. |
| - std::vector<std::string> gaia_accounts; |
| + std::vector<std::pair<std::string, bool> > gaia_accounts; |
| bool valid_json = gaia::ParseListAccountsData(data, &gaia_accounts); |
| if (!valid_json) { |
| VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: parsing error"; |
| } else if (gaia_accounts.size() > 0) { |
| VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: " |
| << "Gaia " << gaia_accounts.size() << " accounts, " |
| - << "Primary is '" << gaia_accounts[0] << "'"; |
| + << "Primary is '" << gaia_accounts[0].first << "'"; |
| } else { |
| VLOG(1) << "AccountReconcilor::OnListAccountsSuccess: No accounts"; |
| } |
| @@ -459,7 +464,7 @@ void AccountReconcilor::OnListAccountsFailure( |
| const GoogleServiceAuthError& error) { |
| gaia_fetcher_.reset(); |
| VLOG(1) << "AccountReconcilor::OnListAccountsFailure: " << error.ToString(); |
| - std::vector<std::string> empty_accounts; |
| + std::vector<std::pair<std::string, bool> > empty_accounts; |
| // There must be at least one callback waiting for result. |
| DCHECK(!get_gaia_accounts_callbacks_.empty()); |
| @@ -480,7 +485,7 @@ void AccountReconcilor::MayBeDoNextListAccounts() { |
| void AccountReconcilor::ContinueReconcileActionAfterGetGaiaAccounts( |
| const GoogleServiceAuthError& error, |
| - const std::vector<std::string>& accounts) { |
| + const std::vector<std::pair<std::string, bool> >& accounts) { |
| if (error.state() == GoogleServiceAuthError::NONE) { |
| gaia_accounts_ = accounts; |
| are_gaia_accounts_set_ = true; |
| @@ -569,13 +574,14 @@ void AccountReconcilor::FinishReconcile() { |
| DCHECK(add_to_cookie_.empty()); |
| DCHECK(add_to_chrome_.empty()); |
| bool are_primaries_equal = |
| - gaia_accounts_.size() > 0 && primary_account_ == gaia_accounts_[0]; |
| + gaia_accounts_.size() > 0 && primary_account_ == gaia_accounts_[0].first; |
| if (are_primaries_equal) { |
| // Determine if we need to merge accounts from gaia cookie to chrome. |
| for (size_t i = 0; i < gaia_accounts_.size(); ++i) { |
| - const std::string& gaia_account = gaia_accounts_[i]; |
| - if (valid_chrome_accounts_.find(gaia_account) == |
| + const std::string& gaia_account = gaia_accounts_[i].first; |
| + if (gaia_accounts_[i].second && |
| + valid_chrome_accounts_.find(gaia_account) == |
| valid_chrome_accounts_.end()) { |
| add_to_chrome_.push_back(std::make_pair(gaia_account, i)); |
| } |
| @@ -585,10 +591,15 @@ void AccountReconcilor::FinishReconcile() { |
| for (std::set<std::string>::const_iterator i = |
| valid_chrome_accounts_.begin(); |
| i != valid_chrome_accounts_.end(); ++i) { |
| - if (std::find(gaia_accounts_.begin(), gaia_accounts_.end(), *i) == |
| - gaia_accounts_.end()) { |
| - add_to_cookie_.push_back(*i); |
| + bool add_to_cookie = true; |
| + for (size_t j = 0; j < gaia_accounts_.size(); ++j) { |
| + if (gaia_accounts_[j].first == *i) { |
| + add_to_cookie = !gaia_accounts_[j].second; |
| + break; |
| + } |
| } |
| + if (add_to_cookie) |
| + add_to_cookie_.push_back(*i); |
| } |
| } else { |
| VLOG(1) << "AccountReconcilor::FinishReconcile: rebuild cookie"; |