account_reconcilor_unittest.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/command_line.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/run_loop.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/test/histogram_tester.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/time/time.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "build/build_config.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/signin/account_reconcilor_factory.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/signin/chrome_signin_client_factory.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/signin/fake_signin_manager.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/signin/test_signin_client_builder.h" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/signin/core/browser/account_reconcilor.h" 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/signin/core/browser/profile_oauth2_token_service.h" 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/signin/core/browser/signin_manager.h" 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/signin/core/browser/signin_metrics.h" 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/signin/core/common/profile_management_switches.h" 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/signin/core/common/signin_switches.h" 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kTestEmail[] = "user@gmail.com"; 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static KeyedService* Build(content::BrowserContext* context); 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MockAccountReconcilor(ProfileOAuth2TokenService* token_service, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerBase* signin_manager, 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SigninClient* client); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~MockAccountReconcilor() {} 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void StartFetchingExternalCcResult() OVERRIDE { 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Don't do this in tests. 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD1(PerformMergeAction, void(const std::string& account_id)); 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MOCK_METHOD1(PerformStartRemoveAction, void(const std::string& account_id)); 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MOCK_METHOD3( 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PerformFinishRemoveAction, 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void(const std::string& account_id, 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GoogleServiceAuthError& error, 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::vector<std::pair<std::string, bool> >& accounts)); 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) MOCK_METHOD3(PerformAddToChromeAction, 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void(const std::string& account_id, 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int session_index, 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& signin_scoped_device_id)); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MOCK_METHOD0(PerformLogoutAllAccountsAction, void()); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)KeyedService* MockAccountReconcilor::Build(content::BrowserContext* context) { 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = new MockAccountReconcilor( 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile), 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile), 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ChromeSigninClientFactory::GetForProfile(profile)); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->Initialize(false /* start_reconcile_if_tokens_available */); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return reconcilor; 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)MockAccountReconcilor::MockAccountReconcilor( 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileOAuth2TokenService* token_service, 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerBase* signin_manager, 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninClient* client) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : testing::StrictMock<AccountReconcilor>(token_service, 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager, 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) client) {} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class AccountReconcilorTest : public ::testing::TestWithParam<bool> { 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AccountReconcilorTest(); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE; 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestingProfile* profile() { return profile_; } 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FakeProfileOAuth2TokenService* token_service() { return token_service_; } 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::HistogramTester* histogram_tester() { return &histogram_tester_; } 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void SetFakeResponse(const std::string& url, 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& data, 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HttpStatusCode code, 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) net::URLRequestStatus::Status status) { 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) MockAccountReconcilor* GetMockReconcilor(); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SimulateMergeSessionCompleted( 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MergeSessionHelper::Observer* observer, 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& account_id, 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GoogleServiceAuthError& error); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void SimulateRefreshTokenFetched( 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor, 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& account_id, 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& refresh_token); 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::TestBrowserThreadBundle bundle_; 1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) TestingProfile* profile_; 1206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) FakeSigninManagerForTesting* signin_manager_; 1216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) FakeProfileOAuth2TokenService* token_service_; 1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) MockAccountReconcilor* mock_reconcilor_; 1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) net::FakeURLFetcherFactory url_fetcher_factory_; 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<TestingProfileManager> testing_profile_manager_; 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::HistogramTester histogram_tester_; 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)AccountReconcilorTest::AccountReconcilorTest() 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : signin_manager_(NULL), 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service_(NULL), 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mock_reconcilor_(NULL), 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) url_fetcher_factory_(NULL) {} 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AccountReconcilorTest::SetUp() { 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // If it's a non-parameterized test, or we have a parameter of true, set flag. 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetParam()) { 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CommandLine::ForCurrentProcess()->AppendSwitch( 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switches::kEnableNewProfileManagement); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testing_profile_manager_.reset( 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(testing_profile_manager_.get()->SetUp()); 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestingProfile::TestingFactories factories; 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factories.push_back(std::make_pair(ChromeSigninClientFactory::GetInstance(), 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin::BuildTestSigninClient)); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factories.push_back(std::make_pair( 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetInstance(), 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuildFakeProfileOAuth2TokenService)); 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(), 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FakeSigninManagerBase::Build)); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factories.push_back(std::make_pair(AccountReconcilorFactory::GetInstance(), 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MockAccountReconcilor::Build)); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile_ = testing_profile_manager_.get()->CreateTestingProfile("name", 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<PrefServiceSyncable>(), 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::UTF8ToUTF16("name"), 0, std::string(), 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factories); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager_ = 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static_cast<FakeSigninManagerForTesting*>( 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerFactory::GetForProfile(profile())); 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service_ = 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static_cast<FakeProfileOAuth2TokenService*>( 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!mock_reconcilor_) { 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mock_reconcilor_ = 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static_cast<MockAccountReconcilor*>( 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile())); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return mock_reconcilor_; 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AccountReconcilorTest::SimulateMergeSessionCompleted( 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MergeSessionHelper::Observer* observer, 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& account_id, 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GoogleServiceAuthError& error) { 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) observer->MergeSessionCompleted(account_id, error); 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AccountReconcilorTest::SimulateRefreshTokenFetched( 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor, 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& account_id, 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& refresh_token) { 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->HandleRefreshTokenFetched(account_id, refresh_token); 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(AccountReconcilorTest, Basic) { 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 2006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 2016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_EQ(token_service(), reconcilor->token_service()); 2026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 2036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if !defined(OS_CHROMEOS) 2056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// This method requires the use of the |TestSigninClient| to be created from the 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded| 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// method with an empty implementation. On MacOS, the normal implementation 2096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// causes the try_bots to time out. 2106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(AccountReconcilorTest, SigninManagerRegistration) { 2116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilor* reconcilor = 2126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 2136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService()); 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->set_password("password"); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->OnExternalSigninCompleted(kTestEmail); 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->SignOut(signin_metrics::SIGNOUT_TEST); 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService()); 2246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 2256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// This method requires the use of the |TestSigninClient| to be created from the 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded| 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// method with an empty implementation. On MacOS, the normal implementation 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// causes the try_bots to time out. 2306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(AccountReconcilorTest, Reauth) { 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_manager()->set_password("password"); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccountReconcilorFactory::GetForProfile(profile()); 2366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 2376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 2386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Simulate reauth. The state of the reconcilor should not change. 2406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->OnExternalSigninCompleted(kTestEmail); 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(AccountReconcilorTest, ProfileAlreadyConnected) { 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor); 252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor); 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->StartReconcile(); 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::vector<std::pair<std::string, bool> >& accounts = 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor->GetGaiaAccountsForTesting(); 2736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_EQ(1u, accounts.size()); 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ("user@gmail.com", accounts[0].first); 2756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 2766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { 2786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 281f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 2826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), "", 2856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reconcilor->StartReconcile(); 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 2896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_EQ(0u, reconcilor->GetGaiaAccountsForTesting().size()); 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(AccountReconcilorTest, ValidateAccountsFromTokens) { 2956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 2966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilor* reconcilor = 2996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 3006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reconcilor->ValidateAccountsFromTokenService(); 3036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 3076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->IssueTokenForAllPendingRequests("access_token", 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 3096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 3116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1u, reconcilor->GetValidChromeAccountsForTesting().size()); 3136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_EQ(0u, reconcilor->GetInvalidChromeAccountsForTesting().size()); 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(AccountReconcilorTest, ValidateAccountsFromTokensFailedUserInfo) { 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor); 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->ValidateAccountsFromTokenService(); 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "", net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->IssueTokenForAllPendingRequests("access_token", 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(0u, reconcilor->GetValidChromeAccountsForTesting().size()); 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(1u, reconcilor->GetInvalidChromeAccountsForTesting().size()); 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(AccountReconcilorTest, ValidateAccountsFromTokensFailedTokenRequest) { 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor); 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->ValidateAccountsFromTokenService(); 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->IssueErrorForAllPendingRequests( 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(0u, reconcilor->GetValidChromeAccountsForTesting().size()); 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(1u, reconcilor->GetInvalidChromeAccountsForTesting().size()); 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_P(AccountReconcilorTest, StartReconcileNoop) { 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->SetAuthenticatedUsername(kTestEmail); 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor); 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 371f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor->StartReconcile(); 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1u, reconcilor->GetGaiaAccountsForTesting().size()); 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 3826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 3836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(reconcilor->is_reconcile_started_); 3876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histogram_tester()->ExpectTotalCount( 3896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1); 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// This is test is needed until chrome changes to use gaia obfuscated id. 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The signin manager and token service use the gaia "email" property, which 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// preserves dots in usernames and preserves case. gaia::ParseListAccountsData() 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// however uses gaia "displayEmail" which does not preserve case, and then 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// passes the string through gaia::CanonicalizeEmail() which removes dots. This 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// tests makes sure that an email like "Dot.S@hmail.com", as seen by the 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// token service, will be considered the same as "dots@gmail.com" as returned 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// by gaia::ParseListAccountsData(). 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->SetAuthenticatedUsername("Dot.S@gmail.com"); 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials("Dot.S@gmail.com", "refresh_token"); 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor); 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reconcilor->StartReconcile(); 4196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 4206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, reconcilor->GetGaiaAccountsForTesting().size()); 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_STREQ("dots@gmail.com", 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reconcilor->GetGaiaAccountsForTesting()[0].first.c_str()); 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("Dot.S@gmail.com", "access_token", 430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 4316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1); 440f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 4456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 4466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilor* reconcilor = 4486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 4496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor); 4506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 4526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 4536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 4546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 4556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 4566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 4576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reconcilor->StartReconcile(); 4596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 4606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 4616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 4636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); 4646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 4656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_EQ(2u, reconcilor->GetGaiaAccountsForTesting().size()); 4666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->IssueAllTokensForAccount("other@gmail.com", "access_token", 4686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 4696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 4716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); 4726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 4746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); 4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectTotalCount( 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1); 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 4986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 4996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AccountReconcilor* reconcilor = GetMockReconcilor(); 5026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reconcilor->StartReconcile(); 503f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount("other@gmail.com", "access_token", 5046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 505f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 506f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 5096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_TRUE(reconcilor->is_reconcile_started_); 5106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", 5116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone()); 5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 5156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1); 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 5206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 5216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); 522f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 5236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 524f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 526f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 527f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 5286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 5306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); 531f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse( 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GaiaUrls::GetInstance()->list_accounts_url().spec(), 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, 536f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 537f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 538f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "{\"id\":\"foo\"}", 539f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::HTTP_OK, 540f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 541f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 542f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = GetMockReconcilor(); 543f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor->StartReconcile(); 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->IssueAllTokensForAccount( 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "other@gmail.com", 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "access_token", 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 548f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount( 5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "user@gmail.com", 5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "access_token", 5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->is_reconcile_started_); 5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SimulateMergeSessionCompleted( 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 558f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histogram_tester()->ExpectUniqueSample( 560f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 561f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1); 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) histogram_tester()->ExpectUniqueSample( 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 568f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Do another pass after I've added a third account to the token service 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 570f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse( 571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GaiaUrls::GetInstance()->list_accounts_url().spec(), 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::HTTP_OK, 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This will cause the reconcilor to fire. 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials("third@gmail.com", "refresh_token"); 578f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount( 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "other@gmail.com", 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "access_token", 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount( 584f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "user@gmail.com", 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "access_token", 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount( 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "third@gmail.com", 589f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "access_token", 590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 591f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->is_reconcile_started_); 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SimulateMergeSessionCompleted( 596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor, "third@gmail.com", GoogleServiceAuthError::AuthErrorNone()); 597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 598f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 601f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1); 603f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 604f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 606f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); 607f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 608f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", 609f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 610f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1); 611f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 612f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1); 613f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 614f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.AddedToChrome.SubsequentRun", 0, 1); 615f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 616f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 617f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AccountReconcilorTest, StartReconcileAddToChrome) { 618f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 619f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 620f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 621f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), 622f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PerformAddToChromeAction("other@gmail.com", 1, "")); 623f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 624f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 625f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 630f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = GetMockReconcilor(); 632f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor->StartReconcile(); 633f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 634f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 635f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor->is_reconcile_started_); 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SimulateRefreshTokenFetched(reconcilor, "other@gmail.com", ""); 639f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 6405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 641f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 642f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signin_metrics::ACCOUNTS_SAME, 6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1); 6456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 6466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); 6476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) histogram_tester()->ExpectUniqueSample( 6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Signin.Reconciler.AddedToChrome.FirstRun", 1, 1); 6495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { 6526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 6536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 6546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 6555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); 657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::HTTP_OK, net::URLRequestStatus::SUCCESS); 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccountReconcilor* reconcilor = GetMockReconcilor(); 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reconcilor->StartReconcile(); 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("other@gmail.com", "access_token", 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->is_reconcile_started_); 676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GoogleServiceAuthError::AuthErrorNone()); 678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->is_reconcile_started_); 679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", 680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GoogleServiceAuthError::AuthErrorNone()); 681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(reconcilor->is_reconcile_started_); 682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histogram_tester()->ExpectUniqueSample( 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, 686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1); 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci histogram_tester()->ExpectUniqueSample( 688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Signin.Reconciler.AddedToCookieJar.FirstRun", 2, 1); 689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histogram_tester()->ExpectUniqueSample( 690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); 6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 693116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { 694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_manager()->SetAuthenticatedUsername(kTestEmail); 695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccountReconcilor* reconcilor = 698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AccountReconcilorFactory::GetForProfile(profile()); 699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor); 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::HTTP_OK, net::URLRequestStatus::SUCCESS); 704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 707f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reconcilor->StartReconcile(); 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->is_reconcile_started_); 710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(reconcilor->is_reconcile_started_); 716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 718116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { 719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 721f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 722f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 723f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 724f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]," 727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::HTTP_OK, net::URLRequestStatus::SUCCESS); 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 730f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 732f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* reconcilor = 733f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 734f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(reconcilor); 7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 736f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 737f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) reconcilor->StartReconcile(); 738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(reconcilor->is_reconcile_started_); 739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service()->IssueAllTokensForAccount("other@gmail.com", "access_token", 743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time::Now() + base::TimeDelta::FromHours(1)); 744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 7466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", 7476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone()); 7486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 7496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 7506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 7516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(AccountReconcilorTest, MergeSessionCompletedWithBogusAccount) { 7526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 7536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 7546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 7556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 7565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), 7585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", 7595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::HTTP_OK, net::URLRequestStatus::SUCCESS); 7605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", 7615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); 7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilor* reconcilor = 7645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile()); 7655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor); 7665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 7685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reconcilor->StartReconcile(); 7695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->is_reconcile_started_); 7705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", 7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Time::Now() + base::TimeDelta::FromHours(1)); 7735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // If an unknown account id is sent, it should not upset the state. 7766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SimulateMergeSessionCompleted(reconcilor, "bogus@gmail.com", 7775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::AuthErrorNone()); 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(reconcilor->is_reconcile_started_); 7796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", 7816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone()); 7826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ASSERT_FALSE(reconcilor->is_reconcile_started_); 7836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, 7865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccountReconcilorTest, 7875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testing::Bool()); 7886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 7896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)