| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/prefs/pref_registry_simple.h" | 8 #include "base/prefs/pref_registry_simple.h" |
| 9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
| 10 #include "base/prefs/testing_pref_service.h" | 10 #include "base/prefs/testing_pref_service.h" |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 new net::TestURLRequestContextGetter(message_loop_.task_runner())); | 266 new net::TestURLRequestContextGetter(message_loop_.task_runner())); |
| 267 | 267 |
| 268 account_tracker_.reset(new AccountTrackerService()); | 268 account_tracker_.reset(new AccountTrackerService()); |
| 269 account_tracker_->Initialize(signin_client_.get()); | 269 account_tracker_->Initialize(signin_client_.get()); |
| 270 | 270 |
| 271 account_fetcher_.reset(new AccountFetcherService()); | 271 account_fetcher_.reset(new AccountFetcherService()); |
| 272 account_fetcher_->Initialize(signin_client_.get(), | 272 account_fetcher_->Initialize(signin_client_.get(), |
| 273 fake_oauth2_token_service_.get(), | 273 fake_oauth2_token_service_.get(), |
| 274 account_tracker_.get(), nullptr); | 274 account_tracker_.get(), nullptr); |
| 275 | 275 |
| 276 account_fetcher_->EnableNetworkFetches(); | 276 account_fetcher_->OnRefreshTokensLoaded(); |
| 277 } | 277 } |
| 278 | 278 |
| 279 void TearDown() override { | 279 void TearDown() override { |
| 280 account_fetcher_->Shutdown(); | 280 account_fetcher_->Shutdown(); |
| 281 account_tracker_->Shutdown(); | 281 account_tracker_->Shutdown(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 void SimulateTokenAvailable(const std::string& account_id) { | 284 void SimulateTokenAvailable(const std::string& account_id) { |
| 285 fake_oauth2_token_service_->AddAccount(account_id); | 285 fake_oauth2_token_service_->AddAccount(account_id); |
| 286 } | 286 } |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 TEST_F(AccountTrackerServiceTest, TokenAlreadyExists) { | 447 TEST_F(AccountTrackerServiceTest, TokenAlreadyExists) { |
| 448 SimulateTokenAvailable("alpha"); | 448 SimulateTokenAvailable("alpha"); |
| 449 AccountTrackerService tracker; | 449 AccountTrackerService tracker; |
| 450 AccountTrackerObserver observer; | 450 AccountTrackerObserver observer; |
| 451 AccountFetcherService fetcher; | 451 AccountFetcherService fetcher; |
| 452 | 452 |
| 453 tracker.AddObserver(&observer); | 453 tracker.AddObserver(&observer); |
| 454 tracker.Initialize(signin_client()); | 454 tracker.Initialize(signin_client()); |
| 455 | 455 |
| 456 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 456 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 457 fetcher.EnableNetworkFetches(); | 457 fetcher.OnRefreshTokensLoaded(); |
| 458 ASSERT_FALSE(fetcher.IsAllUserInfoFetched()); | 458 ASSERT_FALSE(fetcher.IsAllUserInfoFetched()); |
| 459 ASSERT_TRUE(observer.CheckEvents()); | 459 ASSERT_TRUE(observer.CheckEvents()); |
| 460 tracker.RemoveObserver(&observer); | 460 tracker.RemoveObserver(&observer); |
| 461 tracker.Shutdown(); | 461 tracker.Shutdown(); |
| 462 fetcher.Shutdown(); | 462 fetcher.Shutdown(); |
| 463 } | 463 } |
| 464 | 464 |
| 465 TEST_F(AccountTrackerServiceTest, TwoTokenAvailable_TwoUserInfo) { | 465 TEST_F(AccountTrackerServiceTest, TwoTokenAvailable_TwoUserInfo) { |
| 466 AccountTrackerObserver observer; | 466 AccountTrackerObserver observer; |
| 467 account_tracker()->AddObserver(&observer); | 467 account_tracker()->AddObserver(&observer); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 fetcher_service.Initialize(signin_client(), token_service(), &tracker, | 538 fetcher_service.Initialize(signin_client(), token_service(), &tracker, |
| 539 nullptr); | 539 nullptr); |
| 540 | 540 |
| 541 SimulateTokenAvailable("alpha"); | 541 SimulateTokenAvailable("alpha"); |
| 542 IssueAccessToken("alpha"); | 542 IssueAccessToken("alpha"); |
| 543 // No fetcher has been created yet. | 543 // No fetcher has been created yet. |
| 544 net::TestURLFetcher* fetcher = test_fetcher_factory()->GetFetcherByID( | 544 net::TestURLFetcher* fetcher = test_fetcher_factory()->GetFetcherByID( |
| 545 gaia::GaiaOAuthClient::kUrlFetcherId); | 545 gaia::GaiaOAuthClient::kUrlFetcherId); |
| 546 ASSERT_FALSE(fetcher); | 546 ASSERT_FALSE(fetcher); |
| 547 | 547 |
| 548 // Enable the network to create the fetcher then issue the access token. | 548 // Enable the network fetches and refresh invalid accounts information. |
| 549 fetcher_service.EnableNetworkFetches(); | 549 fetcher_service.OnRefreshTokensLoaded(); |
| 550 | 550 |
| 551 // Fetcher was created and executes properly. | 551 // Fetcher was created and executes properly. |
| 552 ReturnOAuthUrlFetchSuccess("alpha"); | 552 ReturnOAuthUrlFetchSuccess("alpha"); |
| 553 | 553 |
| 554 AccountInfo info = tracker.GetAccountInfo("alpha"); | 554 AccountInfo info = tracker.GetAccountInfo("alpha"); |
| 555 CheckAccountDetails("alpha", info); | 555 CheckAccountDetails("alpha", info); |
| 556 fetcher_service.Shutdown(); | 556 fetcher_service.Shutdown(); |
| 557 tracker.Shutdown(); | 557 tracker.Shutdown(); |
| 558 } | 558 } |
| 559 | 559 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 TrackingEvent(UPDATED, "beta"))); | 617 TrackingEvent(UPDATED, "beta"))); |
| 618 tracker.RemoveObserver(&observer); | 618 tracker.RemoveObserver(&observer); |
| 619 | 619 |
| 620 std::vector<AccountInfo> infos = tracker.GetAccounts(); | 620 std::vector<AccountInfo> infos = tracker.GetAccounts(); |
| 621 ASSERT_EQ(2u, infos.size()); | 621 ASSERT_EQ(2u, infos.size()); |
| 622 CheckAccountDetails("alpha", infos[0]); | 622 CheckAccountDetails("alpha", infos[0]); |
| 623 CheckAccountDetails("beta", infos[1]); | 623 CheckAccountDetails("beta", infos[1]); |
| 624 | 624 |
| 625 FakeAccountFetcherService fetcher; | 625 FakeAccountFetcherService fetcher; |
| 626 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 626 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 627 fetcher.EnableNetworkFetches(); | 627 fetcher.OnRefreshTokensLoaded(); |
| 628 // Remove an account. | 628 // Remove an account. |
| 629 // This will allow testing removal as well as child accounts which is only | 629 // This will allow testing removal as well as child accounts which is only |
| 630 // allowed for a single account. | 630 // allowed for a single account. |
| 631 SimulateTokenRevoked("alpha"); | 631 SimulateTokenRevoked("alpha"); |
| 632 fetcher.FakeSetIsChildAccount("beta", true); | 632 fetcher.FakeSetIsChildAccount("beta", true); |
| 633 | 633 |
| 634 fetcher.Shutdown(); | 634 fetcher.Shutdown(); |
| 635 tracker.Shutdown(); | 635 tracker.Shutdown(); |
| 636 } | 636 } |
| 637 | 637 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 667 } | 667 } |
| 668 | 668 |
| 669 TEST_F(AccountTrackerServiceTest, UpgradeToFullAccountInfo) { | 669 TEST_F(AccountTrackerServiceTest, UpgradeToFullAccountInfo) { |
| 670 // Start by simulating an incomplete account info and let it be saved to | 670 // Start by simulating an incomplete account info and let it be saved to |
| 671 // prefs. | 671 // prefs. |
| 672 { | 672 { |
| 673 AccountTrackerService tracker; | 673 AccountTrackerService tracker; |
| 674 tracker.Initialize(signin_client()); | 674 tracker.Initialize(signin_client()); |
| 675 AccountFetcherService fetcher; | 675 AccountFetcherService fetcher; |
| 676 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 676 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 677 fetcher.EnableNetworkFetches(); | 677 fetcher.OnRefreshTokensLoaded(); |
| 678 SimulateTokenAvailable("incomplete"); | 678 SimulateTokenAvailable("incomplete"); |
| 679 ReturnOAuthUrlFetchSuccessIncomplete("incomplete"); | 679 ReturnOAuthUrlFetchSuccessIncomplete("incomplete"); |
| 680 tracker.Shutdown(); | 680 tracker.Shutdown(); |
| 681 fetcher.Shutdown(); | 681 fetcher.Shutdown(); |
| 682 } | 682 } |
| 683 | 683 |
| 684 { | 684 { |
| 685 AccountTrackerService tracker; | 685 AccountTrackerService tracker; |
| 686 tracker.Initialize(signin_client()); | 686 tracker.Initialize(signin_client()); |
| 687 AccountFetcherService fetcher; | 687 AccountFetcherService fetcher; |
| 688 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 688 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 689 // Validate that the loaded AccountInfo from prefs is considered invalid. | 689 // Validate that the loaded AccountInfo from prefs is considered invalid. |
| 690 std::vector<AccountInfo> infos = tracker.GetAccounts(); | 690 std::vector<AccountInfo> infos = tracker.GetAccounts(); |
| 691 ASSERT_EQ(1u, infos.size()); | 691 ASSERT_EQ(1u, infos.size()); |
| 692 ASSERT_FALSE(infos[0].IsValid()); | 692 ASSERT_FALSE(infos[0].IsValid()); |
| 693 | 693 |
| 694 // Enable network fetches and simulate the same account getting a refresh | 694 // Enable network fetches and simulate the same account getting a refresh |
| 695 // token containing all the info. | 695 // token containing all the info. |
| 696 fetcher.EnableNetworkFetches(); | 696 fetcher.OnRefreshTokensLoaded(); |
| 697 SimulateTokenAvailable("incomplete"); | 697 SimulateTokenAvailable("incomplete"); |
| 698 ReturnOAuthUrlFetchSuccess("incomplete"); | 698 ReturnOAuthUrlFetchSuccess("incomplete"); |
| 699 | 699 |
| 700 // Validate that the account is now considered valid. | 700 // Validate that the account is now considered valid. |
| 701 infos = tracker.GetAccounts(); | 701 infos = tracker.GetAccounts(); |
| 702 ASSERT_EQ(1u, infos.size()); | 702 ASSERT_EQ(1u, infos.size()); |
| 703 ASSERT_TRUE(infos[0].IsValid()); | 703 ASSERT_TRUE(infos[0].IsValid()); |
| 704 | 704 |
| 705 tracker.Shutdown(); | 705 tracker.Shutdown(); |
| 706 fetcher.Shutdown(); | 706 fetcher.Shutdown(); |
| 707 } | 707 } |
| 708 | 708 |
| 709 // Reinstantiate a tracker to validate that the AccountInfo saved to prefs is | 709 // Reinstantiate a tracker to validate that the AccountInfo saved to prefs is |
| 710 // now the upgraded one, considered valid. | 710 // now the upgraded one, considered valid. |
| 711 { | 711 { |
| 712 AccountTrackerService tracker; | 712 AccountTrackerService tracker; |
| 713 AccountTrackerObserver observer; | 713 AccountTrackerObserver observer; |
| 714 tracker.AddObserver(&observer); | 714 tracker.AddObserver(&observer); |
| 715 tracker.Initialize(signin_client()); | 715 tracker.Initialize(signin_client()); |
| 716 AccountFetcherService fetcher; | 716 AccountFetcherService fetcher; |
| 717 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 717 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 718 | 718 |
| 719 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, "incomplete"))); | 719 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, "incomplete"))); |
| 720 // Enabling network fetches shouldn't cause any actual fetch since the | 720 // Enabling network fetches shouldn't cause any actual fetch since the |
| 721 // AccountInfos loaded from prefs should be valid. | 721 // AccountInfos loaded from prefs should be valid. |
| 722 fetcher.EnableNetworkFetches(); | 722 fetcher.OnRefreshTokensLoaded(); |
| 723 | 723 |
| 724 std::vector<AccountInfo> infos = tracker.GetAccounts(); | 724 std::vector<AccountInfo> infos = tracker.GetAccounts(); |
| 725 ASSERT_EQ(1u, infos.size()); | 725 ASSERT_EQ(1u, infos.size()); |
| 726 ASSERT_TRUE(infos[0].IsValid()); | 726 ASSERT_TRUE(infos[0].IsValid()); |
| 727 // Check that no network fetches were made. | 727 // Check that no network fetches were made. |
| 728 ASSERT_TRUE(observer.CheckEvents()); | 728 ASSERT_TRUE(observer.CheckEvents()); |
| 729 | 729 |
| 730 tracker.RemoveObserver(&observer); | 730 tracker.RemoveObserver(&observer); |
| 731 tracker.Shutdown(); | 731 tracker.Shutdown(); |
| 732 fetcher.Shutdown(); | 732 fetcher.Shutdown(); |
| 733 } | 733 } |
| 734 } | 734 } |
| 735 | 735 |
| 736 TEST_F(AccountTrackerServiceTest, TimerRefresh) { | 736 TEST_F(AccountTrackerServiceTest, TimerRefresh) { |
| 737 // Start by creating a tracker and adding a couple accounts to be persisted to | 737 // Start by creating a tracker and adding a couple accounts to be persisted to |
| 738 // prefs. | 738 // prefs. |
| 739 { | 739 { |
| 740 AccountTrackerService tracker; | 740 AccountTrackerService tracker; |
| 741 tracker.Initialize(signin_client()); | 741 tracker.Initialize(signin_client()); |
| 742 AccountFetcherService fetcher; | 742 AccountFetcherService fetcher; |
| 743 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 743 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 744 fetcher.EnableNetworkFetches(); | 744 fetcher.OnRefreshTokensLoaded(); |
| 745 SimulateTokenAvailable("alpha"); | 745 SimulateTokenAvailable("alpha"); |
| 746 ReturnOAuthUrlFetchSuccess("alpha"); | 746 ReturnOAuthUrlFetchSuccess("alpha"); |
| 747 SimulateTokenAvailable("beta"); | 747 SimulateTokenAvailable("beta"); |
| 748 ReturnOAuthUrlFetchSuccess("beta"); | 748 ReturnOAuthUrlFetchSuccess("beta"); |
| 749 tracker.Shutdown(); | 749 tracker.Shutdown(); |
| 750 fetcher.Shutdown(); | 750 fetcher.Shutdown(); |
| 751 } | 751 } |
| 752 | 752 |
| 753 // Rewind the time by half a day, which shouldn't be enough to trigger a | 753 // Rewind the time by half a day, which shouldn't be enough to trigger a |
| 754 // network refresh. | 754 // network refresh. |
| 755 base::Time fake_update = base::Time::Now() - base::TimeDelta::FromHours(12); | 755 base::Time fake_update = base::Time::Now() - base::TimeDelta::FromHours(12); |
| 756 signin_client()->GetPrefs()->SetInt64( | 756 signin_client()->GetPrefs()->SetInt64( |
| 757 AccountFetcherService::kLastUpdatePref, | 757 AccountFetcherService::kLastUpdatePref, |
| 758 fake_update.ToInternalValue()); | 758 fake_update.ToInternalValue()); |
| 759 | 759 |
| 760 // Instantiate a new ATS, making sure the persisted accounts are still there | 760 // Instantiate a new ATS, making sure the persisted accounts are still there |
| 761 // and that no network fetches happen. | 761 // and that no network fetches happen. |
| 762 { | 762 { |
| 763 AccountTrackerService tracker; | 763 AccountTrackerService tracker; |
| 764 tracker.Initialize(signin_client()); | 764 tracker.Initialize(signin_client()); |
| 765 AccountFetcherService fetcher; | 765 AccountFetcherService fetcher; |
| 766 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 766 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 767 | 767 |
| 768 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); | 768 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); |
| 769 std::vector<AccountInfo> infos = tracker.GetAccounts(); | 769 std::vector<AccountInfo> infos = tracker.GetAccounts(); |
| 770 ASSERT_EQ(2u, infos.size()); | 770 ASSERT_EQ(2u, infos.size()); |
| 771 ASSERT_TRUE(infos[0].IsValid()); | 771 ASSERT_TRUE(infos[0].IsValid()); |
| 772 ASSERT_TRUE(infos[1].IsValid()); | 772 ASSERT_TRUE(infos[1].IsValid()); |
| 773 | 773 |
| 774 fetcher.EnableNetworkFetches(); | 774 fetcher.OnRefreshTokensLoaded(); |
| 775 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); | 775 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); |
| 776 tracker.Shutdown(); | 776 tracker.Shutdown(); |
| 777 fetcher.Shutdown(); | 777 fetcher.Shutdown(); |
| 778 } | 778 } |
| 779 | 779 |
| 780 // Rewind the last updated time enough to trigger a network refresh. | 780 // Rewind the last updated time enough to trigger a network refresh. |
| 781 fake_update = base::Time::Now() - base::TimeDelta::FromHours(25); | 781 fake_update = base::Time::Now() - base::TimeDelta::FromHours(25); |
| 782 signin_client()->GetPrefs()->SetInt64( | 782 signin_client()->GetPrefs()->SetInt64( |
| 783 AccountFetcherService::kLastUpdatePref, | 783 AccountFetcherService::kLastUpdatePref, |
| 784 fake_update.ToInternalValue()); | 784 fake_update.ToInternalValue()); |
| 785 | 785 |
| 786 // Instantiate a new tracker and validate that even though the AccountInfos | 786 // Instantiate a new tracker and validate that even though the AccountInfos |
| 787 // are still valid, the network fetches are started. | 787 // are still valid, the network fetches are started. |
| 788 { | 788 { |
| 789 AccountTrackerService tracker; | 789 AccountTrackerService tracker; |
| 790 tracker.Initialize(signin_client()); | 790 tracker.Initialize(signin_client()); |
| 791 AccountFetcherService fetcher; | 791 AccountFetcherService fetcher; |
| 792 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 792 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 793 | 793 |
| 794 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); | 794 ASSERT_TRUE(fetcher.IsAllUserInfoFetched()); |
| 795 std::vector<AccountInfo> infos = tracker.GetAccounts(); | 795 std::vector<AccountInfo> infos = tracker.GetAccounts(); |
| 796 ASSERT_EQ(2u, infos.size()); | 796 ASSERT_EQ(2u, infos.size()); |
| 797 ASSERT_TRUE(infos[0].IsValid()); | 797 ASSERT_TRUE(infos[0].IsValid()); |
| 798 ASSERT_TRUE(infos[1].IsValid()); | 798 ASSERT_TRUE(infos[1].IsValid()); |
| 799 | 799 |
| 800 fetcher.EnableNetworkFetches(); | 800 fetcher.OnRefreshTokensLoaded(); |
| 801 ASSERT_FALSE(fetcher.IsAllUserInfoFetched()); | 801 ASSERT_FALSE(fetcher.IsAllUserInfoFetched()); |
| 802 tracker.Shutdown(); | 802 tracker.Shutdown(); |
| 803 fetcher.Shutdown(); | 803 fetcher.Shutdown(); |
| 804 } | 804 } |
| 805 } | 805 } |
| 806 | 806 |
| 807 TEST_F(AccountTrackerServiceTest, LegacyDottedAccountIds) { | 807 TEST_F(AccountTrackerServiceTest, LegacyDottedAccountIds) { |
| 808 // Start by creating a tracker and adding an account with a dotted account id | 808 // Start by creating a tracker and adding an account with a dotted account id |
| 809 // because of an old bug in token service. The token service would also add | 809 // because of an old bug in token service. The token service would also add |
| 810 // a correct non-dotted account id for the same account. | 810 // a correct non-dotted account id for the same account. |
| 811 { | 811 { |
| 812 AccountTrackerService tracker; | 812 AccountTrackerService tracker; |
| 813 tracker.Initialize(signin_client()); | 813 tracker.Initialize(signin_client()); |
| 814 AccountFetcherService fetcher; | 814 AccountFetcherService fetcher; |
| 815 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 815 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 816 fetcher.EnableNetworkFetches(); | 816 fetcher.OnRefreshTokensLoaded(); |
| 817 SimulateTokenAvailable("foo.bar@gmail.com"); | 817 SimulateTokenAvailable("foo.bar@gmail.com"); |
| 818 SimulateTokenAvailable("foobar@gmail.com"); | 818 SimulateTokenAvailable("foobar@gmail.com"); |
| 819 ReturnOAuthUrlFetchSuccess("foo.bar@gmail.com"); | 819 ReturnOAuthUrlFetchSuccess("foo.bar@gmail.com"); |
| 820 ReturnOAuthUrlFetchSuccess("foobar@gmail.com"); | 820 ReturnOAuthUrlFetchSuccess("foobar@gmail.com"); |
| 821 tracker.Shutdown(); | 821 tracker.Shutdown(); |
| 822 fetcher.Shutdown(); | 822 fetcher.Shutdown(); |
| 823 } | 823 } |
| 824 | 824 |
| 825 // Remove the bad account now from the token service to simulate that it | 825 // Remove the bad account now from the token service to simulate that it |
| 826 // has been "fixed". | 826 // has been "fixed". |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1026 accounts = tracker.GetAccounts(); | 1026 accounts = tracker.GetAccounts(); |
| 1027 ASSERT_EQ(2u, accounts.size()); | 1027 ASSERT_EQ(2u, accounts.size()); |
| 1028 } | 1028 } |
| 1029 } | 1029 } |
| 1030 | 1030 |
| 1031 TEST_F(AccountTrackerServiceTest, ChildAccountBasic) { | 1031 TEST_F(AccountTrackerServiceTest, ChildAccountBasic) { |
| 1032 AccountTrackerService tracker; | 1032 AccountTrackerService tracker; |
| 1033 tracker.Initialize(signin_client()); | 1033 tracker.Initialize(signin_client()); |
| 1034 FakeAccountFetcherService fetcher; | 1034 FakeAccountFetcherService fetcher; |
| 1035 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 1035 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 1036 fetcher.EnableNetworkFetches(); | 1036 fetcher.OnRefreshTokensLoaded(); |
| 1037 AccountTrackerObserver observer; | 1037 AccountTrackerObserver observer; |
| 1038 tracker.AddObserver(&observer); | 1038 tracker.AddObserver(&observer); |
| 1039 std::string child_id("child"); | 1039 std::string child_id("child"); |
| 1040 { | 1040 { |
| 1041 // Responses are processed iff there is a single account with a valid token | 1041 // Responses are processed iff there is a single account with a valid token |
| 1042 // and the response is for that account. | 1042 // and the response is for that account. |
| 1043 fetcher.FakeSetIsChildAccount(child_id, true); | 1043 fetcher.FakeSetIsChildAccount(child_id, true); |
| 1044 ASSERT_TRUE(observer.CheckEvents()); | 1044 ASSERT_TRUE(observer.CheckEvents()); |
| 1045 } | 1045 } |
| 1046 { | 1046 { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1057 tracker.RemoveObserver(&observer); | 1057 tracker.RemoveObserver(&observer); |
| 1058 fetcher.Shutdown(); | 1058 fetcher.Shutdown(); |
| 1059 tracker.Shutdown(); | 1059 tracker.Shutdown(); |
| 1060 } | 1060 } |
| 1061 | 1061 |
| 1062 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedAndRevoked) { | 1062 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedAndRevoked) { |
| 1063 AccountTrackerService tracker; | 1063 AccountTrackerService tracker; |
| 1064 tracker.Initialize(signin_client()); | 1064 tracker.Initialize(signin_client()); |
| 1065 FakeAccountFetcherService fetcher; | 1065 FakeAccountFetcherService fetcher; |
| 1066 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 1066 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 1067 fetcher.EnableNetworkFetches(); | 1067 fetcher.OnRefreshTokensLoaded(); |
| 1068 AccountTrackerObserver observer; | 1068 AccountTrackerObserver observer; |
| 1069 tracker.AddObserver(&observer); | 1069 tracker.AddObserver(&observer); |
| 1070 std::string child_id("child"); | 1070 std::string child_id("child"); |
| 1071 | 1071 |
| 1072 SimulateTokenAvailable(child_id); | 1072 SimulateTokenAvailable(child_id); |
| 1073 IssueAccessToken(child_id); | 1073 IssueAccessToken(child_id); |
| 1074 fetcher.FakeSetIsChildAccount(child_id, false); | 1074 fetcher.FakeSetIsChildAccount(child_id, false); |
| 1075 FakeUserInfoFetchSuccess(&fetcher, child_id); | 1075 FakeUserInfoFetchSuccess(&fetcher, child_id); |
| 1076 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); | 1076 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); |
| 1077 AccountInfo info = tracker.GetAccountInfo(child_id); | 1077 AccountInfo info = tracker.GetAccountInfo(child_id); |
| 1078 ASSERT_FALSE(info.is_child_account); | 1078 ASSERT_FALSE(info.is_child_account); |
| 1079 SimulateTokenRevoked(child_id); | 1079 SimulateTokenRevoked(child_id); |
| 1080 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(REMOVED, child_id))); | 1080 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(REMOVED, child_id))); |
| 1081 | 1081 |
| 1082 tracker.RemoveObserver(&observer); | 1082 tracker.RemoveObserver(&observer); |
| 1083 fetcher.Shutdown(); | 1083 fetcher.Shutdown(); |
| 1084 tracker.Shutdown(); | 1084 tracker.Shutdown(); |
| 1085 } | 1085 } |
| 1086 | 1086 |
| 1087 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedAndRevokedWithUpdate) { | 1087 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedAndRevokedWithUpdate) { |
| 1088 AccountTrackerService tracker; | 1088 AccountTrackerService tracker; |
| 1089 tracker.Initialize(signin_client()); | 1089 tracker.Initialize(signin_client()); |
| 1090 FakeAccountFetcherService fetcher; | 1090 FakeAccountFetcherService fetcher; |
| 1091 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 1091 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 1092 fetcher.EnableNetworkFetches(); | 1092 fetcher.OnRefreshTokensLoaded(); |
| 1093 AccountTrackerObserver observer; | 1093 AccountTrackerObserver observer; |
| 1094 tracker.AddObserver(&observer); | 1094 tracker.AddObserver(&observer); |
| 1095 std::string child_id("child"); | 1095 std::string child_id("child"); |
| 1096 | 1096 |
| 1097 SimulateTokenAvailable(child_id); | 1097 SimulateTokenAvailable(child_id); |
| 1098 IssueAccessToken(child_id); | 1098 IssueAccessToken(child_id); |
| 1099 fetcher.FakeSetIsChildAccount(child_id, true); | 1099 fetcher.FakeSetIsChildAccount(child_id, true); |
| 1100 FakeUserInfoFetchSuccess(&fetcher, child_id); | 1100 FakeUserInfoFetchSuccess(&fetcher, child_id); |
| 1101 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); | 1101 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); |
| 1102 AccountInfo info = tracker.GetAccountInfo(child_id); | 1102 AccountInfo info = tracker.GetAccountInfo(child_id); |
| 1103 ASSERT_TRUE(info.is_child_account); | 1103 ASSERT_TRUE(info.is_child_account); |
| 1104 SimulateTokenRevoked(child_id); | 1104 SimulateTokenRevoked(child_id); |
| 1105 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), | 1105 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), |
| 1106 TrackingEvent(REMOVED, child_id))); | 1106 TrackingEvent(REMOVED, child_id))); |
| 1107 | 1107 |
| 1108 tracker.RemoveObserver(&observer); | 1108 tracker.RemoveObserver(&observer); |
| 1109 fetcher.Shutdown(); | 1109 fetcher.Shutdown(); |
| 1110 tracker.Shutdown(); | 1110 tracker.Shutdown(); |
| 1111 } | 1111 } |
| 1112 | 1112 |
| 1113 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedTwiceThenRevoked) { | 1113 TEST_F(AccountTrackerServiceTest, ChildAccountUpdatedTwiceThenRevoked) { |
| 1114 AccountTrackerService tracker; | 1114 AccountTrackerService tracker; |
| 1115 tracker.Initialize(signin_client()); | 1115 tracker.Initialize(signin_client()); |
| 1116 FakeAccountFetcherService fetcher; | 1116 FakeAccountFetcherService fetcher; |
| 1117 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 1117 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 1118 fetcher.EnableNetworkFetches(); | 1118 fetcher.OnRefreshTokensLoaded(); |
| 1119 AccountTrackerObserver observer; | 1119 AccountTrackerObserver observer; |
| 1120 tracker.AddObserver(&observer); | 1120 tracker.AddObserver(&observer); |
| 1121 std::string child_id("child"); | 1121 std::string child_id("child"); |
| 1122 | 1122 |
| 1123 SimulateTokenAvailable(child_id); | 1123 SimulateTokenAvailable(child_id); |
| 1124 IssueAccessToken(child_id); | 1124 IssueAccessToken(child_id); |
| 1125 // Observers notified the first time. | 1125 // Observers notified the first time. |
| 1126 FakeUserInfoFetchSuccess(&fetcher, child_id); | 1126 FakeUserInfoFetchSuccess(&fetcher, child_id); |
| 1127 // Since the account state is already valid, this will notify the | 1127 // Since the account state is already valid, this will notify the |
| 1128 // observers for the second time. | 1128 // observers for the second time. |
| 1129 fetcher.FakeSetIsChildAccount(child_id, true); | 1129 fetcher.FakeSetIsChildAccount(child_id, true); |
| 1130 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), | 1130 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), |
| 1131 TrackingEvent(UPDATED, child_id))); | 1131 TrackingEvent(UPDATED, child_id))); |
| 1132 SimulateTokenRevoked(child_id); | 1132 SimulateTokenRevoked(child_id); |
| 1133 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), | 1133 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id), |
| 1134 TrackingEvent(REMOVED, child_id))); | 1134 TrackingEvent(REMOVED, child_id))); |
| 1135 | 1135 |
| 1136 tracker.RemoveObserver(&observer); | 1136 tracker.RemoveObserver(&observer); |
| 1137 fetcher.Shutdown(); | 1137 fetcher.Shutdown(); |
| 1138 tracker.Shutdown(); | 1138 tracker.Shutdown(); |
| 1139 } | 1139 } |
| 1140 | 1140 |
| 1141 TEST_F(AccountTrackerServiceTest, ChildAccountGraduation) { | 1141 TEST_F(AccountTrackerServiceTest, ChildAccountGraduation) { |
| 1142 AccountTrackerService tracker; | 1142 AccountTrackerService tracker; |
| 1143 tracker.Initialize(signin_client()); | 1143 tracker.Initialize(signin_client()); |
| 1144 FakeAccountFetcherService fetcher; | 1144 FakeAccountFetcherService fetcher; |
| 1145 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); | 1145 fetcher.Initialize(signin_client(), token_service(), &tracker, nullptr); |
| 1146 fetcher.EnableNetworkFetches(); | 1146 fetcher.OnRefreshTokensLoaded(); |
| 1147 AccountTrackerObserver observer; | 1147 AccountTrackerObserver observer; |
| 1148 tracker.AddObserver(&observer); | 1148 tracker.AddObserver(&observer); |
| 1149 std::string child_id("child"); | 1149 std::string child_id("child"); |
| 1150 | 1150 |
| 1151 SimulateTokenAvailable(child_id); | 1151 SimulateTokenAvailable(child_id); |
| 1152 IssueAccessToken(child_id); | 1152 IssueAccessToken(child_id); |
| 1153 | 1153 |
| 1154 // Set and verify this is a child account. | 1154 // Set and verify this is a child account. |
| 1155 fetcher.FakeSetIsChildAccount(child_id, true); | 1155 fetcher.FakeSetIsChildAccount(child_id, true); |
| 1156 AccountInfo info = tracker.GetAccountInfo(child_id); | 1156 AccountInfo info = tracker.GetAccountInfo(child_id); |
| 1157 ASSERT_TRUE(info.is_child_account); | 1157 ASSERT_TRUE(info.is_child_account); |
| 1158 FakeUserInfoFetchSuccess(&fetcher, child_id); | 1158 FakeUserInfoFetchSuccess(&fetcher, child_id); |
| 1159 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); | 1159 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); |
| 1160 | 1160 |
| 1161 // Now simulate child account graduation. | 1161 // Now simulate child account graduation. |
| 1162 fetcher.FakeSetIsChildAccount(child_id, false); | 1162 fetcher.FakeSetIsChildAccount(child_id, false); |
| 1163 info = tracker.GetAccountInfo(child_id); | 1163 info = tracker.GetAccountInfo(child_id); |
| 1164 ASSERT_FALSE(info.is_child_account); | 1164 ASSERT_FALSE(info.is_child_account); |
| 1165 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); | 1165 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(UPDATED, child_id))); |
| 1166 | 1166 |
| 1167 SimulateTokenRevoked(child_id); | 1167 SimulateTokenRevoked(child_id); |
| 1168 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(REMOVED, child_id))); | 1168 ASSERT_TRUE(observer.CheckEvents(TrackingEvent(REMOVED, child_id))); |
| 1169 | 1169 |
| 1170 tracker.RemoveObserver(&observer); | 1170 tracker.RemoveObserver(&observer); |
| 1171 fetcher.Shutdown(); | 1171 fetcher.Shutdown(); |
| 1172 tracker.Shutdown(); | 1172 tracker.Shutdown(); |
| 1173 } | 1173 } |
| OLD | NEW |