| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| 11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
| 12 #include "chrome/browser/prefs/pref_service_syncable.h" | 12 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 13 #include "chrome/browser/signin/account_reconcilor_factory.h" | 13 #include "chrome/browser/signin/account_reconcilor_factory.h" |
| 14 #include "chrome/browser/signin/account_tracker_service_factory.h" | 14 #include "chrome/browser/signin/account_tracker_service_factory.h" |
| 15 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 15 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
| 16 #include "chrome/browser/signin/fake_gaia_cookie_manager_service.h" |
| 16 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 17 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| 17 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" | 18 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
| 18 #include "chrome/browser/signin/fake_signin_manager.h" | 19 #include "chrome/browser/signin/fake_signin_manager.h" |
| 19 #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" | 20 #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" |
| 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 21 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 21 #include "chrome/browser/signin/signin_manager_factory.h" | 22 #include "chrome/browser/signin/signin_manager_factory.h" |
| 22 #include "chrome/browser/signin/test_signin_client_builder.h" | 23 #include "chrome/browser/signin/test_signin_client_builder.h" |
| 23 #include "chrome/test/base/testing_browser_process.h" | 24 #include "chrome/test/base/testing_browser_process.h" |
| 24 #include "chrome/test/base/testing_profile.h" | 25 #include "chrome/test/base/testing_profile.h" |
| 25 #include "chrome/test/base/testing_profile_manager.h" | 26 #include "chrome/test/base/testing_profile_manager.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 class AccountReconcilorTest : public ::testing::TestWithParam<bool> { | 82 class AccountReconcilorTest : public ::testing::TestWithParam<bool> { |
| 82 public: | 83 public: |
| 83 AccountReconcilorTest(); | 84 AccountReconcilorTest(); |
| 84 void SetUp() override; | 85 void SetUp() override; |
| 85 | 86 |
| 86 TestingProfile* profile() { return profile_; } | 87 TestingProfile* profile() { return profile_; } |
| 87 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } | 88 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } |
| 88 FakeProfileOAuth2TokenService* token_service() { return token_service_; } | 89 FakeProfileOAuth2TokenService* token_service() { return token_service_; } |
| 89 TestSigninClient* test_signin_client() { return test_signin_client_; } | 90 TestSigninClient* test_signin_client() { return test_signin_client_; } |
| 90 AccountTrackerService* account_tracker() { return account_tracker_; } | 91 AccountTrackerService* account_tracker() { return account_tracker_; } |
| 92 FakeGaiaCookieManagerService* cookie_manager_service() { |
| 93 return cookie_manager_service_; |
| 94 } |
| 91 base::HistogramTester* histogram_tester() { return &histogram_tester_; } | 95 base::HistogramTester* histogram_tester() { return &histogram_tester_; } |
| 92 | 96 |
| 93 void SetFakeResponse(const std::string& url, | 97 void SetFakeResponse(const std::string& url, |
| 94 const std::string& data, | 98 const std::string& data, |
| 95 net::HttpStatusCode code, | 99 net::HttpStatusCode code, |
| 96 net::URLRequestStatus::Status status) { | 100 net::URLRequestStatus::Status status) { |
| 97 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); | 101 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); |
| 98 } | 102 } |
| 99 | 103 |
| 100 MockAccountReconcilor* GetMockReconcilor(); | 104 MockAccountReconcilor* GetMockReconcilor(); |
| 101 | 105 |
| 102 std::string ConnectProfileToAccount(const std::string& gaia_id, | 106 std::string ConnectProfileToAccount(const std::string& gaia_id, |
| 103 const std::string& username); | 107 const std::string& username); |
| 104 | 108 |
| 105 std::string PickAccountIdForAccount(const std::string& gaia_id, | 109 std::string PickAccountIdForAccount(const std::string& gaia_id, |
| 106 const std::string& username); | 110 const std::string& username); |
| 107 | 111 |
| 108 void SimulateAddAccountToCookieCompleted( | 112 void SimulateAddAccountToCookieCompleted( |
| 109 GaiaCookieManagerService::Observer* observer, | 113 GaiaCookieManagerService::Observer* observer, |
| 110 const std::string& account_id, | 114 const std::string& account_id, |
| 111 const GoogleServiceAuthError& error); | 115 const GoogleServiceAuthError& error); |
| 112 | 116 |
| 113 void SimulateCookieContentSettingsChanged( | 117 void SimulateCookieContentSettingsChanged( |
| 114 content_settings::Observer* observer, | 118 content_settings::Observer* observer, |
| 115 const ContentSettingsPattern& primary_pattern); | 119 const ContentSettingsPattern& primary_pattern); |
| 116 | 120 |
| 117 GURL list_accounts_url() { return list_accounts_url_; } | |
| 118 GURL get_check_connection_info_url() { | 121 GURL get_check_connection_info_url() { |
| 119 return get_check_connection_info_url_; | 122 return get_check_connection_info_url_; |
| 120 } | 123 } |
| 121 | 124 |
| 122 private: | 125 private: |
| 123 content::TestBrowserThreadBundle bundle_; | 126 content::TestBrowserThreadBundle bundle_; |
| 124 TestingProfile* profile_; | 127 TestingProfile* profile_; |
| 125 FakeSigninManagerForTesting* signin_manager_; | 128 FakeSigninManagerForTesting* signin_manager_; |
| 126 FakeProfileOAuth2TokenService* token_service_; | 129 FakeProfileOAuth2TokenService* token_service_; |
| 127 TestSigninClient* test_signin_client_; | 130 TestSigninClient* test_signin_client_; |
| 128 AccountTrackerService* account_tracker_; | 131 AccountTrackerService* account_tracker_; |
| 132 FakeGaiaCookieManagerService* cookie_manager_service_; |
| 129 MockAccountReconcilor* mock_reconcilor_; | 133 MockAccountReconcilor* mock_reconcilor_; |
| 130 net::FakeURLFetcherFactory url_fetcher_factory_; | 134 net::FakeURLFetcherFactory url_fetcher_factory_; |
| 131 scoped_ptr<TestingProfileManager> testing_profile_manager_; | 135 scoped_ptr<TestingProfileManager> testing_profile_manager_; |
| 132 base::HistogramTester histogram_tester_; | 136 base::HistogramTester histogram_tester_; |
| 133 GURL list_accounts_url_; | |
| 134 GURL get_check_connection_info_url_; | 137 GURL get_check_connection_info_url_; |
| 135 | 138 |
| 136 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); | 139 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); |
| 137 }; | 140 }; |
| 138 | 141 |
| 139 AccountReconcilorTest::AccountReconcilorTest() | 142 AccountReconcilorTest::AccountReconcilorTest() |
| 140 : signin_manager_(NULL), | 143 : signin_manager_(NULL), |
| 141 token_service_(NULL), | 144 token_service_(NULL), |
| 142 test_signin_client_(NULL), | 145 test_signin_client_(NULL), |
| 146 cookie_manager_service_(NULL), |
| 143 mock_reconcilor_(NULL), | 147 mock_reconcilor_(NULL), |
| 144 url_fetcher_factory_(NULL) {} | 148 url_fetcher_factory_(NULL) {} |
| 145 | 149 |
| 146 void AccountReconcilorTest::SetUp() { | 150 void AccountReconcilorTest::SetUp() { |
| 147 // If it's a non-parameterized test, or we have a parameter of true, set flag. | 151 // If it's a non-parameterized test, or we have a parameter of true, set flag. |
| 148 if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || | 152 if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || |
| 149 GetParam()) { | 153 GetParam()) { |
| 150 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 154 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 151 switches::kEnableNewProfileManagement); | 155 switches::kEnableNewProfileManagement); |
| 152 } | 156 } |
| 153 | 157 |
| 154 list_accounts_url_ = GaiaUrls::GetInstance()->ListAccountsURLWithSource( | |
| 155 GaiaConstants::kReconcilorSource); | |
| 156 get_check_connection_info_url_ = | 158 get_check_connection_info_url_ = |
| 157 GaiaUrls::GetInstance()->GetCheckConnectionInfoURLWithSource( | 159 GaiaUrls::GetInstance()->GetCheckConnectionInfoURLWithSource( |
| 158 GaiaConstants::kChromeSource); | 160 GaiaConstants::kChromeSource); |
| 159 | 161 |
| 160 // Specific tests may set a response that includes specific accounts. | |
| 161 SetFakeResponse(list_accounts_url().spec(), "", | |
| 162 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); | |
| 163 | |
| 164 testing_profile_manager_.reset( | 162 testing_profile_manager_.reset( |
| 165 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 163 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
| 166 ASSERT_TRUE(testing_profile_manager_.get()->SetUp()); | 164 ASSERT_TRUE(testing_profile_manager_.get()->SetUp()); |
| 167 | 165 |
| 168 TestingProfile::TestingFactories factories; | 166 TestingProfile::TestingFactories factories; |
| 169 factories.push_back(std::make_pair(ChromeSigninClientFactory::GetInstance(), | 167 factories.push_back(std::make_pair(ChromeSigninClientFactory::GetInstance(), |
| 170 signin::BuildTestSigninClient)); | 168 signin::BuildTestSigninClient)); |
| 171 factories.push_back(std::make_pair( | 169 factories.push_back(std::make_pair( |
| 172 ProfileOAuth2TokenServiceFactory::GetInstance(), | 170 ProfileOAuth2TokenServiceFactory::GetInstance(), |
| 173 BuildFakeProfileOAuth2TokenService)); | 171 BuildFakeProfileOAuth2TokenService)); |
| 172 factories.push_back(std::make_pair( |
| 173 GaiaCookieManagerServiceFactory::GetInstance(), |
| 174 FakeGaiaCookieManagerService::Build)); |
| 174 factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(), | 175 factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(), |
| 175 FakeSigninManagerBase::Build)); | 176 FakeSigninManagerBase::Build)); |
| 176 factories.push_back(std::make_pair(AccountReconcilorFactory::GetInstance(), | 177 factories.push_back(std::make_pair(AccountReconcilorFactory::GetInstance(), |
| 177 MockAccountReconcilor::Build)); | 178 MockAccountReconcilor::Build)); |
| 178 | 179 |
| 179 profile_ = testing_profile_manager_.get()->CreateTestingProfile("name", | 180 profile_ = testing_profile_manager_.get()->CreateTestingProfile("name", |
| 180 scoped_ptr<PrefServiceSyncable>(), | 181 scoped_ptr<PrefServiceSyncable>(), |
| 181 base::UTF8ToUTF16("name"), 0, std::string(), | 182 base::UTF8ToUTF16("name"), 0, std::string(), |
| 182 factories); | 183 factories); |
| 183 | 184 |
| 184 test_signin_client_ = | 185 test_signin_client_ = |
| 185 static_cast<TestSigninClient*>( | 186 static_cast<TestSigninClient*>( |
| 186 ChromeSigninClientFactory::GetForProfile(profile())); | 187 ChromeSigninClientFactory::GetForProfile(profile())); |
| 187 | 188 |
| 188 token_service_ = | 189 token_service_ = |
| 189 static_cast<FakeProfileOAuth2TokenService*>( | 190 static_cast<FakeProfileOAuth2TokenService*>( |
| 190 ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); | 191 ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); |
| 191 | 192 |
| 192 account_tracker_ = | 193 account_tracker_ = |
| 193 AccountTrackerServiceFactory::GetForProfile(profile()); | 194 AccountTrackerServiceFactory::GetForProfile(profile()); |
| 194 | 195 |
| 195 signin_manager_ = | 196 signin_manager_ = |
| 196 static_cast<FakeSigninManagerForTesting*>( | 197 static_cast<FakeSigninManagerForTesting*>( |
| 197 SigninManagerFactory::GetForProfile(profile())); | 198 SigninManagerFactory::GetForProfile(profile())); |
| 199 |
| 200 test_signin_client_ = |
| 201 static_cast<TestSigninClient*>( |
| 202 ChromeSigninClientFactory::GetForProfile(profile())); |
| 203 |
| 204 cookie_manager_service_ = |
| 205 static_cast<FakeGaiaCookieManagerService*>( |
| 206 GaiaCookieManagerServiceFactory::GetForProfile(profile())); |
| 207 cookie_manager_service_->Init(&url_fetcher_factory_); |
| 208 |
| 209 cookie_manager_service_->SetListAccountsResponseHttpNotFound(); |
| 198 } | 210 } |
| 199 | 211 |
| 200 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { | 212 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { |
| 201 if (!mock_reconcilor_) { | 213 if (!mock_reconcilor_) { |
| 202 mock_reconcilor_ = | 214 mock_reconcilor_ = |
| 203 static_cast<MockAccountReconcilor*>( | 215 static_cast<MockAccountReconcilor*>( |
| 204 AccountReconcilorFactory::GetForProfile(profile())); | 216 AccountReconcilorFactory::GetForProfile(profile())); |
| 205 } | 217 } |
| 206 | 218 |
| 207 return mock_reconcilor_; | 219 return mock_reconcilor_; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 | 308 |
| 297 AccountReconcilor* reconcilor = | 309 AccountReconcilor* reconcilor = |
| 298 AccountReconcilorFactory::GetForProfile(profile()); | 310 AccountReconcilorFactory::GetForProfile(profile()); |
| 299 ASSERT_TRUE(reconcilor); | 311 ASSERT_TRUE(reconcilor); |
| 300 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); | 312 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); |
| 301 } | 313 } |
| 302 | 314 |
| 303 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { | 315 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { |
| 304 const std::string account_id = | 316 const std::string account_id = |
| 305 ConnectProfileToAccount("12345", "user@gmail.com"); | 317 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 318 cookie_manager_service()->SetListAccountsResponseOneAccountWithExpiry( |
| 319 kTestEmail, true); |
| 306 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 320 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 307 | 321 |
| 308 AccountReconcilor* reconcilor = | 322 AccountReconcilor* reconcilor = |
| 309 AccountReconcilorFactory::GetForProfile(profile()); | 323 AccountReconcilorFactory::GetForProfile(profile()); |
| 310 ASSERT_TRUE(reconcilor); | 324 ASSERT_TRUE(reconcilor); |
| 311 | 325 |
| 312 SetFakeResponse(list_accounts_url().spec(), | 326 reconcilor->StartReconcile(); |
| 313 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", | 327 base::RunLoop().RunUntilIdle(); |
| 314 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 315 | 328 |
| 316 reconcilor->StartReconcile(); | 329 std::vector<std::pair<std::string, bool> > accounts; |
| 317 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 330 ASSERT_TRUE(cookie_manager_service()->ListAccounts(&accounts)); |
| 318 | |
| 319 base::RunLoop().RunUntilIdle(); | |
| 320 ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); | |
| 321 const std::vector<std::pair<std::string, bool> >& accounts = | |
| 322 reconcilor->GetGaiaAccountsForTesting(); | |
| 323 ASSERT_EQ(1u, accounts.size()); | 331 ASSERT_EQ(1u, accounts.size()); |
| 324 ASSERT_EQ(account_id, accounts[0].first); | 332 ASSERT_EQ(account_id, accounts[0].first); |
| 325 } | 333 } |
| 326 | 334 |
| 327 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { | 335 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { |
| 328 ConnectProfileToAccount("12345", "user@gmail.com"); | 336 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 337 cookie_manager_service()->SetListAccountsResponseHttpNotFound(); |
| 338 |
| 329 AccountReconcilor* reconcilor = | 339 AccountReconcilor* reconcilor = |
| 330 AccountReconcilorFactory::GetForProfile(profile()); | 340 AccountReconcilorFactory::GetForProfile(profile()); |
| 331 ASSERT_TRUE(reconcilor); | 341 ASSERT_TRUE(reconcilor); |
| 332 | 342 |
| 333 SetFakeResponse(list_accounts_url().spec(), "", | 343 reconcilor->StartReconcile(); |
| 334 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); | 344 base::RunLoop().RunUntilIdle(); |
| 335 | 345 |
| 336 reconcilor->StartReconcile(); | 346 std::vector<std::pair<std::string, bool> > accounts; |
| 337 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 347 ASSERT_FALSE(cookie_manager_service()->ListAccounts(&accounts)); |
| 338 | 348 ASSERT_EQ(0u, accounts.size()); |
| 339 base::RunLoop().RunUntilIdle(); | |
| 340 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | |
| 341 } | 349 } |
| 342 | 350 |
| 343 TEST_P(AccountReconcilorTest, StartReconcileNoop) { | 351 TEST_P(AccountReconcilorTest, StartReconcileNoop) { |
| 344 const std::string account_id = | 352 const std::string account_id = |
| 345 ConnectProfileToAccount("12345", "user@gmail.com"); | 353 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 346 | 354 |
| 347 AccountReconcilor* reconcilor = | 355 AccountReconcilor* reconcilor = |
| 348 AccountReconcilorFactory::GetForProfile(profile()); | 356 AccountReconcilorFactory::GetForProfile(profile()); |
| 349 ASSERT_TRUE(reconcilor); | 357 ASSERT_TRUE(reconcilor); |
| 350 | 358 |
| 351 SetFakeResponse(list_accounts_url().spec(), | 359 cookie_manager_service()->SetListAccountsResponseOneAccount(kTestEmail); |
| 352 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 353 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 354 | 360 |
| 355 reconcilor->StartReconcile(); | 361 reconcilor->StartReconcile(); |
| 356 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 362 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 357 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | |
| 358 | 363 |
| 359 base::RunLoop().RunUntilIdle(); | 364 base::RunLoop().RunUntilIdle(); |
| 360 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 365 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 361 | 366 |
| 362 histogram_tester()->ExpectTotalCount( | 367 histogram_tester()->ExpectTotalCount( |
| 363 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); | 368 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
| 364 histogram_tester()->ExpectUniqueSample( | 369 histogram_tester()->ExpectUniqueSample( |
| 365 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 370 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 366 signin_metrics::ACCOUNTS_SAME, | 371 signin_metrics::ACCOUNTS_SAME, |
| 367 1); | 372 1); |
| 368 } | 373 } |
| 369 | 374 |
| 370 TEST_P(AccountReconcilorTest, StartReconcileCookiesDisabled) { | 375 TEST_P(AccountReconcilorTest, StartReconcileCookiesDisabled) { |
| 371 const std::string account_id = | 376 const std::string account_id = |
| 372 ConnectProfileToAccount("12345", "user@gmail.com"); | 377 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 373 token_service()->UpdateCredentials(account_id, "refresh_token"); | 378 token_service()->UpdateCredentials(account_id, "refresh_token"); |
| 374 test_signin_client()->set_are_signin_cookies_allowed(false); | 379 test_signin_client()->set_are_signin_cookies_allowed(false); |
| 375 | 380 |
| 376 AccountReconcilor* reconcilor = | 381 AccountReconcilor* reconcilor = |
| 377 AccountReconcilorFactory::GetForProfile(profile()); | 382 AccountReconcilorFactory::GetForProfile(profile()); |
| 378 ASSERT_TRUE(reconcilor); | 383 ASSERT_TRUE(reconcilor); |
| 379 | 384 |
| 380 reconcilor->StartReconcile(); | 385 reconcilor->StartReconcile(); |
| 381 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 386 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 382 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | |
| 383 | 387 |
| 384 base::RunLoop().RunUntilIdle(); | 388 base::RunLoop().RunUntilIdle(); |
| 389 std::vector<std::pair<std::string, bool> > accounts; |
| 390 // This will be the first call to ListAccounts. |
| 391 ASSERT_FALSE(cookie_manager_service()->ListAccounts(&accounts)); |
| 385 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 392 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 386 } | 393 } |
| 387 | 394 |
| 388 TEST_P(AccountReconcilorTest, StartReconcileContentSettings) { | 395 TEST_P(AccountReconcilorTest, StartReconcileContentSettings) { |
| 389 const std::string account_id = | 396 const std::string account_id = |
| 390 ConnectProfileToAccount("12345", "user@gmail.com"); | 397 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 391 token_service()->UpdateCredentials(account_id, "refresh_token"); | 398 token_service()->UpdateCredentials(account_id, "refresh_token"); |
| 392 | 399 |
| 393 AccountReconcilor* reconcilor = | 400 AccountReconcilor* reconcilor = |
| 394 AccountReconcilorFactory::GetForProfile(profile()); | 401 AccountReconcilorFactory::GetForProfile(profile()); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 // token service, will be considered the same as "dots@gmail.com" as returned | 468 // token service, will be considered the same as "dots@gmail.com" as returned |
| 462 // by gaia::ParseListAccountsData(). | 469 // by gaia::ParseListAccountsData(). |
| 463 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { | 470 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { |
| 464 if (account_tracker()->GetMigrationState() != | 471 if (account_tracker()->GetMigrationState() != |
| 465 AccountTrackerService::MIGRATION_NOT_STARTED) { | 472 AccountTrackerService::MIGRATION_NOT_STARTED) { |
| 466 return; | 473 return; |
| 467 } | 474 } |
| 468 | 475 |
| 469 const std::string account_id = | 476 const std::string account_id = |
| 470 ConnectProfileToAccount("12345", "Dot.S@gmail.com"); | 477 ConnectProfileToAccount("12345", "Dot.S@gmail.com"); |
| 478 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 479 "dot.s@gmail.com"); |
| 471 AccountReconcilor* reconcilor = | 480 AccountReconcilor* reconcilor = |
| 472 AccountReconcilorFactory::GetForProfile(profile()); | 481 AccountReconcilorFactory::GetForProfile(profile()); |
| 473 ASSERT_TRUE(reconcilor); | 482 ASSERT_TRUE(reconcilor); |
| 474 | 483 |
| 475 SetFakeResponse(list_accounts_url().spec(), | |
| 476 "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 477 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 478 | |
| 479 reconcilor->StartReconcile(); | 484 reconcilor->StartReconcile(); |
| 480 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | |
| 481 | |
| 482 base::RunLoop().RunUntilIdle(); | 485 base::RunLoop().RunUntilIdle(); |
| 483 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 486 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 484 | 487 |
| 485 histogram_tester()->ExpectUniqueSample( | 488 histogram_tester()->ExpectUniqueSample( |
| 486 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 489 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 487 signin_metrics::ACCOUNTS_SAME, | 490 signin_metrics::ACCOUNTS_SAME, |
| 488 1); | 491 1); |
| 489 } | 492 } |
| 490 | 493 |
| 491 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { | 494 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { |
| 492 const std::string account_id = | 495 const std::string account_id = |
| 493 ConnectProfileToAccount("12345", "user@gmail.com"); | 496 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 494 const std::string account_id2 = | 497 const std::string account_id2 = |
| 495 PickAccountIdForAccount("67890", "other@gmail.com"); | 498 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 499 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 500 "user@gmail.com", "other@gmail.com"); |
| 496 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 501 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 497 | 502 |
| 498 AccountReconcilor* reconcilor = | 503 AccountReconcilor* reconcilor = |
| 499 AccountReconcilorFactory::GetForProfile(profile()); | 504 AccountReconcilorFactory::GetForProfile(profile()); |
| 500 ASSERT_TRUE(reconcilor); | 505 ASSERT_TRUE(reconcilor); |
| 501 | 506 |
| 502 SetFakeResponse(list_accounts_url().spec(), | |
| 503 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | |
| 504 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 505 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 506 | |
| 507 reconcilor->StartReconcile(); | 507 reconcilor->StartReconcile(); |
| 508 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | |
| 509 base::RunLoop().RunUntilIdle(); | 508 base::RunLoop().RunUntilIdle(); |
| 510 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 509 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 511 | 510 |
| 512 histogram_tester()->ExpectTotalCount( | 511 histogram_tester()->ExpectTotalCount( |
| 513 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); | 512 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
| 514 histogram_tester()->ExpectUniqueSample( | 513 histogram_tester()->ExpectUniqueSample( |
| 515 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 514 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 516 signin_metrics::ACCOUNTS_SAME, | 515 signin_metrics::ACCOUNTS_SAME, |
| 517 1); | 516 1); |
| 518 } | 517 } |
| 519 | 518 |
| 520 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { | 519 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { |
| 521 const std::string account_id = | 520 const std::string account_id = |
| 522 ConnectProfileToAccount("12345", "user@gmail.com"); | 521 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 523 token_service()->UpdateCredentials(account_id, "refresh_token"); | 522 token_service()->UpdateCredentials(account_id, "refresh_token"); |
| 523 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 524 "user@gmail.com"); |
| 524 | 525 |
| 525 const std::string account_id2 = | 526 const std::string account_id2 = |
| 526 PickAccountIdForAccount("67890", "other@gmail.com"); | 527 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 527 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 528 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 528 | 529 |
| 529 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); | 530 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); |
| 530 | 531 |
| 531 SetFakeResponse(list_accounts_url().spec(), | |
| 532 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 533 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 534 | |
| 535 AccountReconcilor* reconcilor = GetMockReconcilor(); | 532 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 536 reconcilor->StartReconcile(); | 533 reconcilor->StartReconcile(); |
| 537 | 534 |
| 538 base::RunLoop().RunUntilIdle(); | 535 base::RunLoop().RunUntilIdle(); |
| 539 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 536 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 540 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, | 537 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, |
| 541 GoogleServiceAuthError::AuthErrorNone()); | 538 GoogleServiceAuthError::AuthErrorNone()); |
| 542 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 539 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 543 | 540 |
| 544 histogram_tester()->ExpectUniqueSample( | 541 histogram_tester()->ExpectUniqueSample( |
| 545 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 542 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 546 signin_metrics::ACCOUNTS_SAME, | 543 signin_metrics::ACCOUNTS_SAME, |
| 547 1); | 544 1); |
| 548 histogram_tester()->ExpectUniqueSample( | 545 histogram_tester()->ExpectUniqueSample( |
| 549 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 546 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 550 histogram_tester()->ExpectUniqueSample( | 547 histogram_tester()->ExpectUniqueSample( |
| 551 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 548 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 552 } | 549 } |
| 553 | 550 |
| 554 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) { | 551 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) { |
| 555 const std::string account_id = | 552 const std::string account_id = |
| 556 ConnectProfileToAccount("12345", "user@gmail.com"); | 553 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 557 token_service()->UpdateCredentials(account_id, "refresh_token"); | 554 token_service()->UpdateCredentials(account_id, "refresh_token"); |
| 555 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 556 "user@gmail.com", "other@gmail.com"); |
| 558 | 557 |
| 559 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 558 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 560 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 559 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 561 | 560 |
| 562 SetFakeResponse(list_accounts_url().spec(), | |
| 563 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | |
| 564 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 565 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 566 | |
| 567 AccountReconcilor* reconcilor = GetMockReconcilor(); | 561 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 568 reconcilor->StartReconcile(); | 562 reconcilor->StartReconcile(); |
| 569 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 563 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 570 | 564 |
| 571 base::RunLoop().RunUntilIdle(); | 565 base::RunLoop().RunUntilIdle(); |
| 572 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", | 566 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", |
| 573 GoogleServiceAuthError::AuthErrorNone()); | 567 GoogleServiceAuthError::AuthErrorNone()); |
| 574 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 568 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 575 | 569 |
| 576 histogram_tester()->ExpectUniqueSample( | 570 histogram_tester()->ExpectUniqueSample( |
| 577 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 571 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 578 signin_metrics::ACCOUNTS_SAME, | 572 signin_metrics::ACCOUNTS_SAME, |
| 579 1); | 573 1); |
| 580 histogram_tester()->ExpectUniqueSample( | 574 histogram_tester()->ExpectUniqueSample( |
| 581 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); | 575 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); |
| 582 histogram_tester()->ExpectUniqueSample( | 576 histogram_tester()->ExpectUniqueSample( |
| 583 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 1, 1); | 577 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 1, 1); |
| 584 } | 578 } |
| 585 | 579 |
| 586 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { | 580 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { |
| 587 const std::string account_id = | 581 const std::string account_id = |
| 588 ConnectProfileToAccount("12345", "user@gmail.com"); | 582 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 589 const std::string account_id2 = | 583 const std::string account_id2 = |
| 590 PickAccountIdForAccount("67890", "other@gmail.com"); | 584 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 591 const std::string account_id3 = | 585 const std::string account_id3 = |
| 592 PickAccountIdForAccount("34567", "third@gmail.com"); | 586 PickAccountIdForAccount("34567", "third@gmail.com"); |
| 593 | 587 |
| 594 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 588 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 589 "user@gmail.com"); |
| 595 | 590 |
| 596 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); | 591 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); |
| 597 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id3)); | 592 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id3)); |
| 598 | 593 |
| 599 SetFakeResponse( | |
| 600 list_accounts_url().spec(), | |
| 601 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 602 net::HTTP_OK, | |
| 603 net::URLRequestStatus::SUCCESS); | |
| 604 | |
| 605 AccountReconcilor* reconcilor = GetMockReconcilor(); | 594 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 606 reconcilor->StartReconcile(); | 595 reconcilor->StartReconcile(); |
| 607 | 596 |
| 608 base::RunLoop().RunUntilIdle(); | 597 base::RunLoop().RunUntilIdle(); |
| 609 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 598 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 610 SimulateAddAccountToCookieCompleted( | 599 SimulateAddAccountToCookieCompleted( |
| 611 reconcilor, account_id2, GoogleServiceAuthError::AuthErrorNone()); | 600 reconcilor, account_id2, GoogleServiceAuthError::AuthErrorNone()); |
| 612 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 601 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 613 | 602 |
| 614 histogram_tester()->ExpectUniqueSample( | 603 histogram_tester()->ExpectUniqueSample( |
| 615 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 604 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 616 signin_metrics::ACCOUNTS_SAME, | 605 signin_metrics::ACCOUNTS_SAME, |
| 617 1); | 606 1); |
| 618 histogram_tester()->ExpectUniqueSample( | 607 histogram_tester()->ExpectUniqueSample( |
| 619 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 608 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 620 histogram_tester()->ExpectUniqueSample( | 609 histogram_tester()->ExpectUniqueSample( |
| 621 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 610 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 622 | 611 |
| 623 // Do another pass after I've added a third account to the token service | 612 // Do another pass after I've added a third account to the token service |
| 613 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 614 "user@gmail.com", "other@gmail.com"); |
| 615 cookie_manager_service()->set_list_accounts_fetched_once_for_testing(false); |
| 624 | 616 |
| 625 SetFakeResponse( | |
| 626 list_accounts_url().spec(), | |
| 627 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | |
| 628 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 629 net::HTTP_OK, | |
| 630 net::URLRequestStatus::SUCCESS); | |
| 631 // This will cause the reconcilor to fire. | 617 // This will cause the reconcilor to fire. |
| 632 token_service()->UpdateCredentials(account_id3, "refresh_token"); | 618 token_service()->UpdateCredentials(account_id3, "refresh_token"); |
| 633 base::RunLoop().RunUntilIdle(); | 619 base::RunLoop().RunUntilIdle(); |
| 634 | 620 |
| 635 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 621 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 636 SimulateAddAccountToCookieCompleted( | 622 SimulateAddAccountToCookieCompleted( |
| 637 reconcilor, account_id3, GoogleServiceAuthError::AuthErrorNone()); | 623 reconcilor, account_id3, GoogleServiceAuthError::AuthErrorNone()); |
| 638 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 624 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 639 | 625 |
| 640 histogram_tester()->ExpectUniqueSample( | 626 histogram_tester()->ExpectUniqueSample( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 655 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1); | 641 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1); |
| 656 } | 642 } |
| 657 | 643 |
| 658 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { | 644 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { |
| 659 const std::string account_id = | 645 const std::string account_id = |
| 660 ConnectProfileToAccount("12345", "user@gmail.com"); | 646 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 661 const std::string account_id2 = | 647 const std::string account_id2 = |
| 662 PickAccountIdForAccount("67890", "other@gmail.com"); | 648 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 663 | 649 |
| 664 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 650 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 651 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 652 "other@gmail.com", "user@gmail.com"); |
| 665 | 653 |
| 666 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 654 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 667 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 655 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 668 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); | 656 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); |
| 669 | 657 |
| 670 SetFakeResponse(list_accounts_url().spec(), | |
| 671 "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | |
| 672 "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 673 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 674 | |
| 675 AccountReconcilor* reconcilor = GetMockReconcilor(); | 658 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 676 reconcilor->StartReconcile(); | 659 reconcilor->StartReconcile(); |
| 677 | 660 |
| 678 base::RunLoop().RunUntilIdle(); | 661 base::RunLoop().RunUntilIdle(); |
| 679 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 662 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 680 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, | 663 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, |
| 681 GoogleServiceAuthError::AuthErrorNone()); | 664 GoogleServiceAuthError::AuthErrorNone()); |
| 682 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 665 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 683 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 666 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 684 GoogleServiceAuthError::AuthErrorNone()); | 667 GoogleServiceAuthError::AuthErrorNone()); |
| 685 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 668 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 686 | 669 |
| 687 histogram_tester()->ExpectUniqueSample( | 670 histogram_tester()->ExpectUniqueSample( |
| 688 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 671 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 689 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, | 672 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, |
| 690 1); | 673 1); |
| 691 histogram_tester()->ExpectUniqueSample( | 674 histogram_tester()->ExpectUniqueSample( |
| 692 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); | 675 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); |
| 693 histogram_tester()->ExpectUniqueSample( | 676 histogram_tester()->ExpectUniqueSample( |
| 694 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 677 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 695 } | 678 } |
| 696 | 679 |
| 697 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { | 680 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { |
| 698 const std::string account_id = | 681 const std::string account_id = |
| 699 ConnectProfileToAccount("12345", "user@gmail.com"); | 682 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 683 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 684 "user@gmail.com"); |
| 700 | 685 |
| 701 AccountReconcilor* reconcilor = | 686 AccountReconcilor* reconcilor = |
| 702 AccountReconcilorFactory::GetForProfile(profile()); | 687 AccountReconcilorFactory::GetForProfile(profile()); |
| 703 ASSERT_TRUE(reconcilor); | 688 ASSERT_TRUE(reconcilor); |
| 704 | 689 |
| 705 SetFakeResponse(list_accounts_url().spec(), | |
| 706 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 707 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 708 | |
| 709 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 690 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 710 reconcilor->StartReconcile(); | 691 reconcilor->StartReconcile(); |
| 711 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 692 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 712 | 693 |
| 713 base::RunLoop().RunUntilIdle(); | 694 base::RunLoop().RunUntilIdle(); |
| 714 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 695 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 715 } | 696 } |
| 716 | 697 |
| 717 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { | 698 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
| 718 const std::string account_id = | 699 const std::string account_id = |
| 719 ConnectProfileToAccount("12345", "user@gmail.com"); | 700 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 720 const std::string account_id2 = | 701 const std::string account_id2 = |
| 721 PickAccountIdForAccount("67890", "other@gmail.com"); | 702 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 722 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 703 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 704 cookie_manager_service()->SetListAccountsResponseTwoAccountsWithExpiry( |
| 705 "user@gmail.com", true, "other@gmail.com", false); |
| 723 | 706 |
| 724 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 707 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 725 | 708 |
| 726 SetFakeResponse(list_accounts_url().spec(), | |
| 727 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]," | |
| 728 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | |
| 729 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 730 | |
| 731 AccountReconcilor* reconcilor = | 709 AccountReconcilor* reconcilor = |
| 732 AccountReconcilorFactory::GetForProfile(profile()); | 710 AccountReconcilorFactory::GetForProfile(profile()); |
| 733 ASSERT_TRUE(reconcilor); | 711 ASSERT_TRUE(reconcilor); |
| 734 | 712 |
| 735 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 713 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 736 reconcilor->StartReconcile(); | 714 reconcilor->StartReconcile(); |
| 737 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 715 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 738 | 716 |
| 739 base::RunLoop().RunUntilIdle(); | 717 base::RunLoop().RunUntilIdle(); |
| 740 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 718 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 741 GoogleServiceAuthError::AuthErrorNone()); | 719 GoogleServiceAuthError::AuthErrorNone()); |
| 742 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 720 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 743 } | 721 } |
| 744 | 722 |
| 745 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) { | 723 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) { |
| 746 const std::string account_id = | 724 const std::string account_id = |
| 747 ConnectProfileToAccount("12345", "user@gmail.com"); | 725 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 726 cookie_manager_service()->SetListAccountsResponseOneAccountWithExpiry( |
| 727 "user@gmail.com", true); |
| 748 | 728 |
| 749 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 729 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 750 | 730 |
| 751 SetFakeResponse(list_accounts_url().spec(), | |
| 752 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", | |
| 753 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | |
| 754 | |
| 755 AccountReconcilor* reconcilor = | 731 AccountReconcilor* reconcilor = |
| 756 AccountReconcilorFactory::GetForProfile(profile()); | 732 AccountReconcilorFactory::GetForProfile(profile()); |
| 757 ASSERT_TRUE(reconcilor); | 733 ASSERT_TRUE(reconcilor); |
| 758 | 734 |
| 759 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 735 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 760 reconcilor->StartReconcile(); | 736 reconcilor->StartReconcile(); |
| 761 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 737 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 762 | 738 |
| 763 base::RunLoop().RunUntilIdle(); | 739 base::RunLoop().RunUntilIdle(); |
| 764 | 740 |
| 765 // If an unknown account id is sent, it should not upset the state. | 741 // If an unknown account id is sent, it should not upset the state. |
| 766 SimulateAddAccountToCookieCompleted(reconcilor, "bogus_account_id", | 742 SimulateAddAccountToCookieCompleted(reconcilor, "bogus_account_id", |
| 767 GoogleServiceAuthError::AuthErrorNone()); | 743 GoogleServiceAuthError::AuthErrorNone()); |
| 768 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 744 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 769 | 745 |
| 770 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 746 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 771 GoogleServiceAuthError::AuthErrorNone()); | 747 GoogleServiceAuthError::AuthErrorNone()); |
| 772 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 748 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 773 } | 749 } |
| 774 | 750 |
| 775 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, | 751 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, |
| 776 AccountReconcilorTest, | 752 AccountReconcilorTest, |
| 777 testing::Bool()); | 753 testing::Bool()); |
| OLD | NEW |