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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 std::vector<std::string> new_chrome_accounts(token_service_->GetAccounts()); | 690 std::vector<std::string> new_chrome_accounts(token_service_->GetAccounts()); |
687 std::sort(reconciled_accounts.begin(), reconciled_accounts.end()); | 691 std::sort(reconciled_accounts.begin(), reconciled_accounts.end()); |
688 std::sort(new_chrome_accounts.begin(), new_chrome_accounts.end()); | 692 std::sort(new_chrome_accounts.begin(), new_chrome_accounts.end()); |
689 if (reconciled_accounts != new_chrome_accounts) { | 693 if (reconciled_accounts != new_chrome_accounts) { |
690 base::MessageLoop::current()->PostTask( | 694 base::MessageLoop::current()->PostTask( |
691 FROM_HERE, | 695 FROM_HERE, |
692 base::Bind(&AccountReconcilor::StartReconcile, base::Unretained(this))); | 696 base::Bind(&AccountReconcilor::StartReconcile, base::Unretained(this))); |
693 } | 697 } |
694 } | 698 } |
695 | 699 |
696 void AccountReconcilor::MergeSessionCompleted( | 700 // Remove the account from the list that is being merged. |
697 const std::string& account_id, | 701 void AccountReconcilor::MarkAccountAsAddedToCookie( |
698 const GoogleServiceAuthError& error) { | 702 const std::string& account_id) { |
699 VLOG(1) << "AccountReconcilor::MergeSessionCompleted: account_id=" | |
700 << account_id; | |
701 | |
702 // Remove the account from the list that is being merged. | |
703 for (std::vector<std::string>::iterator i = add_to_cookie_.begin(); | 703 for (std::vector<std::string>::iterator i = add_to_cookie_.begin(); |
704 i != add_to_cookie_.end(); | 704 i != add_to_cookie_.end(); |
705 ++i) { | 705 ++i) { |
706 if (account_id == *i) { | 706 if (account_id == *i) { |
707 add_to_cookie_.erase(i); | 707 add_to_cookie_.erase(i); |
708 break; | 708 break; |
709 } | 709 } |
710 } | 710 } |
| 711 } |
711 | 712 |
| 713 void AccountReconcilor::MergeSessionCompleted( |
| 714 const std::string& account_id, |
| 715 const GoogleServiceAuthError& error) { |
| 716 VLOG(1) << "AccountReconcilor::MergeSessionCompleted: account_id=" |
| 717 << account_id; |
| 718 |
| 719 MarkAccountAsAddedToCookie(account_id); |
712 CalculateIfReconcileIsDone(); | 720 CalculateIfReconcileIsDone(); |
713 ScheduleStartReconcileIfChromeAccountsChanged(); | 721 ScheduleStartReconcileIfChromeAccountsChanged(); |
714 } | 722 } |
715 | 723 |
716 void AccountReconcilor::HandleSuccessfulAccountIdCheck( | 724 void AccountReconcilor::HandleSuccessfulAccountIdCheck( |
717 const std::string& account_id) { | 725 const std::string& account_id) { |
718 valid_chrome_accounts_.insert(account_id); | 726 valid_chrome_accounts_.insert(account_id); |
719 FinishReconcile(); | 727 FinishReconcile(); |
720 } | 728 } |
721 | 729 |
722 void AccountReconcilor::HandleFailedAccountIdCheck( | 730 void AccountReconcilor::HandleFailedAccountIdCheck( |
723 const std::string& account_id) { | 731 const std::string& account_id) { |
724 invalid_chrome_accounts_.insert(account_id); | 732 invalid_chrome_accounts_.insert(account_id); |
725 FinishReconcile(); | 733 FinishReconcile(); |
726 } | 734 } |
727 | 735 |
728 void AccountReconcilor::PerformAddAccountToTokenService( | 736 void AccountReconcilor::PerformAddAccountToTokenService( |
729 const std::string& account_id, | 737 const std::string& account_id, |
730 const std::string& refresh_token) { | 738 const std::string& refresh_token) { |
731 // The flow should never get to this method if new_profile_management is | 739 // The flow should never get to this method if new_profile_management is |
732 // false, but better safe than sorry. | 740 // false, but better safe than sorry. |
733 if (!switches::IsNewProfileManagement()) | 741 if (!switches::IsNewProfileManagement()) |
734 return; | 742 return; |
735 token_service_->UpdateCredentials(account_id, refresh_token); | 743 token_service_->UpdateCredentials(account_id, refresh_token); |
736 } | 744 } |
737 | 745 |
738 void AccountReconcilor::HandleRefreshTokenFetched( | 746 // Remove the account from the list that is being updated. |
739 const std::string& account_id, | 747 void AccountReconcilor::MarkAccountAsAddedToChrome( |
740 const std::string& refresh_token) { | 748 const std::string& account_id) { |
741 if (!refresh_token.empty()) { | |
742 PerformAddAccountToTokenService(account_id, refresh_token); | |
743 } | |
744 // Remove the account from the list that is being updated. | |
745 for (std::vector<std::pair<std::string, int> >::iterator i = | 749 for (std::vector<std::pair<std::string, int> >::iterator i = |
746 add_to_chrome_.begin(); | 750 add_to_chrome_.begin(); |
747 i != add_to_chrome_.end(); | 751 i != add_to_chrome_.end(); |
748 ++i) { | 752 ++i) { |
749 if (gaia::AreEmailsSame(account_id, i->first)) { | 753 if (gaia::AreEmailsSame(account_id, i->first)) { |
750 add_to_chrome_.erase(i); | 754 add_to_chrome_.erase(i); |
751 break; | 755 break; |
752 } | 756 } |
753 } | 757 } |
| 758 } |
754 | 759 |
| 760 void AccountReconcilor::HandleRefreshTokenFetched( |
| 761 const std::string& account_id, |
| 762 const std::string& refresh_token) { |
| 763 if (!refresh_token.empty()) |
| 764 PerformAddAccountToTokenService(account_id, refresh_token); |
| 765 |
| 766 MarkAccountAsAddedToChrome(account_id); |
755 CalculateIfReconcileIsDone(); | 767 CalculateIfReconcileIsDone(); |
756 } | 768 } |
OLD | NEW |