| 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_reconcilor.h" | 5 #include "components/signin/core/browser/account_reconcilor.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 VLOG(1) << "AccountReconcilor::GoogleSignedOut: signed out"; | 352 VLOG(1) << "AccountReconcilor::GoogleSignedOut: signed out"; |
| 353 gaia_fetcher_.reset(); | 353 gaia_fetcher_.reset(); |
| 354 get_gaia_accounts_callbacks_.clear(); | 354 get_gaia_accounts_callbacks_.clear(); |
| 355 AbortReconcile(); | 355 AbortReconcile(); |
| 356 UnregisterWithTokenService(); | 356 UnregisterWithTokenService(); |
| 357 UnregisterForCookieChanges(); | 357 UnregisterForCookieChanges(); |
| 358 PerformLogoutAllAccountsAction(); | 358 PerformLogoutAllAccountsAction(); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void AccountReconcilor::PerformMergeAction(const std::string& account_id) { | 361 void AccountReconcilor::PerformMergeAction(const std::string& account_id) { |
| 362 if (!switches::IsNewProfileManagement()) | 362 if (!switches::IsNewProfileManagement()) { |
| 363 MarkAccountAsAddedToCookie(account_id); |
| 363 return; | 364 return; |
| 365 } |
| 364 VLOG(1) << "AccountReconcilor::PerformMergeAction: " << account_id; | 366 VLOG(1) << "AccountReconcilor::PerformMergeAction: " << account_id; |
| 365 merge_session_helper_.LogIn(account_id); | 367 merge_session_helper_.LogIn(account_id); |
| 366 } | 368 } |
| 367 | 369 |
| 368 void AccountReconcilor::PerformStartRemoveAction( | 370 void AccountReconcilor::PerformStartRemoveAction( |
| 369 const std::string& account_id) { | 371 const std::string& account_id) { |
| 370 VLOG(1) << "AccountReconcilor::PerformStartRemoveAction: " << account_id; | 372 VLOG(1) << "AccountReconcilor::PerformStartRemoveAction: " << account_id; |
| 371 GetAccountsFromCookie(base::Bind( | 373 GetAccountsFromCookie(base::Bind( |
| 372 &AccountReconcilor::PerformFinishRemoveAction, | 374 &AccountReconcilor::PerformFinishRemoveAction, |
| 373 base::Unretained(this), | 375 base::Unretained(this), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 391 ++i) { | 393 ++i) { |
| 392 accounts_only.push_back(i->first); | 394 accounts_only.push_back(i->first); |
| 393 } | 395 } |
| 394 merge_session_helper_.LogOut(account_id, accounts_only); | 396 merge_session_helper_.LogOut(account_id, accounts_only); |
| 395 } | 397 } |
| 396 // Wait for the next ReconcileAction if there is an error. | 398 // Wait for the next ReconcileAction if there is an error. |
| 397 } | 399 } |
| 398 | 400 |
| 399 void AccountReconcilor::PerformAddToChromeAction(const std::string& account_id, | 401 void AccountReconcilor::PerformAddToChromeAction(const std::string& account_id, |
| 400 int session_index) { | 402 int session_index) { |
| 401 if (!switches::IsNewProfileManagement()) | 403 if (!switches::IsNewProfileManagement()) { |
| 404 MarkAccountAsAddedToChrome(account_id); |
| 402 return; | 405 return; |
| 406 } |
| 403 VLOG(1) << "AccountReconcilor::PerformAddToChromeAction:" | 407 VLOG(1) << "AccountReconcilor::PerformAddToChromeAction:" |
| 404 << " account=" << account_id << " session_index=" << session_index; | 408 << " account=" << account_id << " session_index=" << session_index; |
| 405 | 409 |
| 406 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 410 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 407 refresh_token_fetchers_.push_back( | 411 refresh_token_fetchers_.push_back( |
| 408 new RefreshTokenFetcher(this, account_id, session_index)); | 412 new RefreshTokenFetcher(this, account_id, session_index)); |
| 409 #endif | 413 #endif |
| 410 } | 414 } |
| 411 | 415 |
| 412 void AccountReconcilor::PerformLogoutAllAccountsAction() { | 416 void AccountReconcilor::PerformLogoutAllAccountsAction() { |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 701 std::vector<std::string> new_chrome_accounts(token_service_->GetAccounts()); | 705 std::vector<std::string> new_chrome_accounts(token_service_->GetAccounts()); |
| 702 std::sort(reconciled_accounts.begin(), reconciled_accounts.end()); | 706 std::sort(reconciled_accounts.begin(), reconciled_accounts.end()); |
| 703 std::sort(new_chrome_accounts.begin(), new_chrome_accounts.end()); | 707 std::sort(new_chrome_accounts.begin(), new_chrome_accounts.end()); |
| 704 if (reconciled_accounts != new_chrome_accounts) { | 708 if (reconciled_accounts != new_chrome_accounts) { |
| 705 base::MessageLoop::current()->PostTask( | 709 base::MessageLoop::current()->PostTask( |
| 706 FROM_HERE, | 710 FROM_HERE, |
| 707 base::Bind(&AccountReconcilor::StartReconcile, base::Unretained(this))); | 711 base::Bind(&AccountReconcilor::StartReconcile, base::Unretained(this))); |
| 708 } | 712 } |
| 709 } | 713 } |
| 710 | 714 |
| 711 void AccountReconcilor::MergeSessionCompleted( | 715 // Remove the account from the list that is being merged. |
| 712 const std::string& account_id, | 716 void AccountReconcilor::MarkAccountAsAddedToCookie( |
| 713 const GoogleServiceAuthError& error) { | 717 const std::string& account_id) { |
| 714 VLOG(1) << "AccountReconcilor::MergeSessionCompleted: account_id=" | |
| 715 << account_id; | |
| 716 | |
| 717 // Remove the account from the list that is being merged. | |
| 718 for (std::vector<std::string>::iterator i = add_to_cookie_.begin(); | 718 for (std::vector<std::string>::iterator i = add_to_cookie_.begin(); |
| 719 i != add_to_cookie_.end(); | 719 i != add_to_cookie_.end(); |
| 720 ++i) { | 720 ++i) { |
| 721 if (account_id == *i) { | 721 if (account_id == *i) { |
| 722 add_to_cookie_.erase(i); | 722 add_to_cookie_.erase(i); |
| 723 break; | 723 break; |
| 724 } | 724 } |
| 725 } | 725 } |
| 726 } |
| 726 | 727 |
| 728 void AccountReconcilor::MergeSessionCompleted( |
| 729 const std::string& account_id, |
| 730 const GoogleServiceAuthError& error) { |
| 731 VLOG(1) << "AccountReconcilor::MergeSessionCompleted: account_id=" |
| 732 << account_id; |
| 733 |
| 734 MarkAccountAsAddedToCookie(account_id); |
| 727 CalculateIfReconcileIsDone(); | 735 CalculateIfReconcileIsDone(); |
| 728 ScheduleStartReconcileIfChromeAccountsChanged(); | 736 ScheduleStartReconcileIfChromeAccountsChanged(); |
| 729 } | 737 } |
| 730 | 738 |
| 731 void AccountReconcilor::HandleSuccessfulAccountIdCheck( | 739 void AccountReconcilor::HandleSuccessfulAccountIdCheck( |
| 732 const std::string& account_id) { | 740 const std::string& account_id) { |
| 733 valid_chrome_accounts_.insert(account_id); | 741 valid_chrome_accounts_.insert(account_id); |
| 734 FinishReconcile(); | 742 FinishReconcile(); |
| 735 } | 743 } |
| 736 | 744 |
| 737 void AccountReconcilor::HandleFailedAccountIdCheck( | 745 void AccountReconcilor::HandleFailedAccountIdCheck( |
| 738 const std::string& account_id) { | 746 const std::string& account_id) { |
| 739 invalid_chrome_accounts_.insert(account_id); | 747 invalid_chrome_accounts_.insert(account_id); |
| 740 FinishReconcile(); | 748 FinishReconcile(); |
| 741 } | 749 } |
| 742 | 750 |
| 743 void AccountReconcilor::PerformAddAccountToTokenService( | 751 void AccountReconcilor::PerformAddAccountToTokenService( |
| 744 const std::string& account_id, | 752 const std::string& account_id, |
| 745 const std::string& refresh_token) { | 753 const std::string& refresh_token) { |
| 746 // The flow should never get to this method if new_profile_management is | 754 // The flow should never get to this method if new_profile_management is |
| 747 // false, but better safe than sorry. | 755 // false, but better safe than sorry. |
| 748 if (!switches::IsNewProfileManagement()) | 756 if (!switches::IsNewProfileManagement()) |
| 749 return; | 757 return; |
| 750 token_service_->UpdateCredentials(account_id, refresh_token); | 758 token_service_->UpdateCredentials(account_id, refresh_token); |
| 751 } | 759 } |
| 752 | 760 |
| 753 void AccountReconcilor::HandleRefreshTokenFetched( | 761 // Remove the account from the list that is being updated. |
| 754 const std::string& account_id, | 762 void AccountReconcilor::MarkAccountAsAddedToChrome( |
| 755 const std::string& refresh_token) { | 763 const std::string& account_id) { |
| 756 if (!refresh_token.empty()) { | |
| 757 PerformAddAccountToTokenService(account_id, refresh_token); | |
| 758 } | |
| 759 // Remove the account from the list that is being updated. | |
| 760 for (std::vector<std::pair<std::string, int> >::iterator i = | 764 for (std::vector<std::pair<std::string, int> >::iterator i = |
| 761 add_to_chrome_.begin(); | 765 add_to_chrome_.begin(); |
| 762 i != add_to_chrome_.end(); | 766 i != add_to_chrome_.end(); |
| 763 ++i) { | 767 ++i) { |
| 764 if (gaia::AreEmailsSame(account_id, i->first)) { | 768 if (gaia::AreEmailsSame(account_id, i->first)) { |
| 765 add_to_chrome_.erase(i); | 769 add_to_chrome_.erase(i); |
| 766 break; | 770 break; |
| 767 } | 771 } |
| 768 } | 772 } |
| 773 } |
| 769 | 774 |
| 775 void AccountReconcilor::HandleRefreshTokenFetched( |
| 776 const std::string& account_id, |
| 777 const std::string& refresh_token) { |
| 778 if (!refresh_token.empty()) |
| 779 PerformAddAccountToTokenService(account_id, refresh_token); |
| 780 |
| 781 MarkAccountAsAddedToChrome(account_id); |
| 770 CalculateIfReconcileIsDone(); | 782 CalculateIfReconcileIsDone(); |
| 771 } | 783 } |
| OLD | NEW |