| 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/stringprintf.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/test/histogram_tester.h" | 10 #include "base/test/histogram_tester.h" |
| 10 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 11 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 12 #include "chrome/browser/prefs/pref_service_syncable.h" | 13 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 13 #include "chrome/browser/signin/account_reconcilor_factory.h" | 14 #include "chrome/browser/signin/account_reconcilor_factory.h" |
| 14 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 15 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
| 15 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 16 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| 16 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" | 17 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
| 17 #include "chrome/browser/signin/fake_signin_manager.h" | 18 #include "chrome/browser/signin/fake_signin_manager.h" |
| 18 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 19 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 19 #include "chrome/browser/signin/signin_manager_factory.h" | 20 #include "chrome/browser/signin/signin_manager_factory.h" |
| 20 #include "chrome/browser/signin/test_signin_client_builder.h" | 21 #include "chrome/browser/signin/test_signin_client_builder.h" |
| 21 #include "chrome/test/base/testing_browser_process.h" | 22 #include "chrome/test/base/testing_browser_process.h" |
| 22 #include "chrome/test/base/testing_profile.h" | 23 #include "chrome/test/base/testing_profile.h" |
| 23 #include "chrome/test/base/testing_profile_manager.h" | 24 #include "chrome/test/base/testing_profile_manager.h" |
| 24 #include "components/signin/core/browser/account_reconcilor.h" | 25 #include "components/signin/core/browser/account_reconcilor.h" |
| 25 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 26 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 26 #include "components/signin/core/browser/signin_manager.h" | 27 #include "components/signin/core/browser/signin_manager.h" |
| 27 #include "components/signin/core/browser/signin_metrics.h" | 28 #include "components/signin/core/browser/signin_metrics.h" |
| 28 #include "components/signin/core/common/profile_management_switches.h" | 29 #include "components/signin/core/common/profile_management_switches.h" |
| 29 #include "components/signin/core/common/signin_switches.h" | 30 #include "components/signin/core/common/signin_switches.h" |
| 30 #include "content/public/test/test_browser_thread_bundle.h" | 31 #include "content/public/test/test_browser_thread_bundle.h" |
| 32 #include "google_apis/gaia/gaia_auth_fetcher.h" |
| 33 #include "google_apis/gaia/gaia_constants.h" |
| 31 #include "google_apis/gaia/gaia_urls.h" | 34 #include "google_apis/gaia/gaia_urls.h" |
| 32 #include "net/url_request/test_url_fetcher_factory.h" | 35 #include "net/url_request/test_url_fetcher_factory.h" |
| 33 #include "testing/gmock/include/gmock/gmock.h" | 36 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 37 #include "testing/gtest/include/gtest/gtest.h" |
| 35 | 38 |
| 36 namespace { | 39 namespace { |
| 37 | 40 |
| 38 const char kTestEmail[] = "user@gmail.com"; | 41 const char kTestEmail[] = "user@gmail.com"; |
| 39 | 42 |
| 40 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { | 43 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); | 95 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); |
| 93 } | 96 } |
| 94 | 97 |
| 95 MockAccountReconcilor* GetMockReconcilor(); | 98 MockAccountReconcilor* GetMockReconcilor(); |
| 96 | 99 |
| 97 void SimulateMergeSessionCompleted( | 100 void SimulateMergeSessionCompleted( |
| 98 MergeSessionHelper::Observer* observer, | 101 MergeSessionHelper::Observer* observer, |
| 99 const std::string& account_id, | 102 const std::string& account_id, |
| 100 const GoogleServiceAuthError& error); | 103 const GoogleServiceAuthError& error); |
| 101 | 104 |
| 105 GURL list_accounts_url() { return list_accounts_url_; } |
| 106 |
| 102 private: | 107 private: |
| 103 content::TestBrowserThreadBundle bundle_; | 108 content::TestBrowserThreadBundle bundle_; |
| 104 TestingProfile* profile_; | 109 TestingProfile* profile_; |
| 105 FakeSigninManagerForTesting* signin_manager_; | 110 FakeSigninManagerForTesting* signin_manager_; |
| 106 FakeProfileOAuth2TokenService* token_service_; | 111 FakeProfileOAuth2TokenService* token_service_; |
| 107 MockAccountReconcilor* mock_reconcilor_; | 112 MockAccountReconcilor* mock_reconcilor_; |
| 108 net::FakeURLFetcherFactory url_fetcher_factory_; | 113 net::FakeURLFetcherFactory url_fetcher_factory_; |
| 109 scoped_ptr<TestingProfileManager> testing_profile_manager_; | 114 scoped_ptr<TestingProfileManager> testing_profile_manager_; |
| 110 base::HistogramTester histogram_tester_; | 115 base::HistogramTester histogram_tester_; |
| 116 GURL list_accounts_url_; |
| 111 | 117 |
| 112 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); | 118 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); |
| 113 }; | 119 }; |
| 114 | 120 |
| 115 AccountReconcilorTest::AccountReconcilorTest() | 121 AccountReconcilorTest::AccountReconcilorTest() |
| 116 : signin_manager_(NULL), | 122 : signin_manager_(NULL), |
| 117 token_service_(NULL), | 123 token_service_(NULL), |
| 118 mock_reconcilor_(NULL), | 124 mock_reconcilor_(NULL), |
| 119 url_fetcher_factory_(NULL) {} | 125 url_fetcher_factory_(NULL) {} |
| 120 | 126 |
| 121 void AccountReconcilorTest::SetUp() { | 127 void AccountReconcilorTest::SetUp() { |
| 122 // If it's a non-parameterized test, or we have a parameter of true, set flag. | 128 // If it's a non-parameterized test, or we have a parameter of true, set flag. |
| 123 if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || | 129 if (!::testing::UnitTest::GetInstance()->current_test_info()->value_param() || |
| 124 GetParam()) { | 130 GetParam()) { |
| 125 CommandLine::ForCurrentProcess()->AppendSwitch( | 131 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 126 switches::kEnableNewProfileManagement); | 132 switches::kEnableNewProfileManagement); |
| 127 } | 133 } |
| 128 | 134 |
| 135 list_accounts_url_ = GaiaAuthFetcher::BuildListAccountsURL( |
| 136 GaiaConstants::kReconcilorSource); |
| 137 |
| 129 testing_profile_manager_.reset( | 138 testing_profile_manager_.reset( |
| 130 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 139 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
| 131 ASSERT_TRUE(testing_profile_manager_.get()->SetUp()); | 140 ASSERT_TRUE(testing_profile_manager_.get()->SetUp()); |
| 132 | 141 |
| 133 TestingProfile::TestingFactories factories; | 142 TestingProfile::TestingFactories factories; |
| 134 factories.push_back(std::make_pair(ChromeSigninClientFactory::GetInstance(), | 143 factories.push_back(std::make_pair(ChromeSigninClientFactory::GetInstance(), |
| 135 signin::BuildTestSigninClient)); | 144 signin::BuildTestSigninClient)); |
| 136 factories.push_back(std::make_pair( | 145 factories.push_back(std::make_pair( |
| 137 ProfileOAuth2TokenServiceFactory::GetInstance(), | 146 ProfileOAuth2TokenServiceFactory::GetInstance(), |
| 138 BuildFakeProfileOAuth2TokenService)); | 147 BuildFakeProfileOAuth2TokenService)); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 } | 240 } |
| 232 | 241 |
| 233 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { | 242 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { |
| 234 signin_manager()->SetAuthenticatedUsername(kTestEmail); | 243 signin_manager()->SetAuthenticatedUsername(kTestEmail); |
| 235 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); | 244 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
| 236 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(kTestEmail)); | 245 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(kTestEmail)); |
| 237 AccountReconcilor* reconcilor = | 246 AccountReconcilor* reconcilor = |
| 238 AccountReconcilorFactory::GetForProfile(profile()); | 247 AccountReconcilorFactory::GetForProfile(profile()); |
| 239 ASSERT_TRUE(reconcilor); | 248 ASSERT_TRUE(reconcilor); |
| 240 | 249 |
| 241 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 250 SetFakeResponse(list_accounts_url().spec(), |
| 242 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", | 251 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", |
| 243 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 252 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 244 | 253 |
| 245 reconcilor->StartReconcile(); | 254 reconcilor->StartReconcile(); |
| 246 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 255 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 247 | 256 |
| 248 base::RunLoop().RunUntilIdle(); | 257 base::RunLoop().RunUntilIdle(); |
| 249 ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); | 258 ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); |
| 250 const std::vector<std::pair<std::string, bool> >& accounts = | 259 const std::vector<std::pair<std::string, bool> >& accounts = |
| 251 reconcilor->GetGaiaAccountsForTesting(); | 260 reconcilor->GetGaiaAccountsForTesting(); |
| 252 ASSERT_EQ(1u, accounts.size()); | 261 ASSERT_EQ(1u, accounts.size()); |
| 253 ASSERT_EQ("user@gmail.com", accounts[0].first); | 262 ASSERT_EQ("user@gmail.com", accounts[0].first); |
| 254 } | 263 } |
| 255 | 264 |
| 256 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { | 265 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { |
| 257 signin_manager()->SetAuthenticatedUsername(kTestEmail); | 266 signin_manager()->SetAuthenticatedUsername(kTestEmail); |
| 258 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); | 267 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
| 259 AccountReconcilor* reconcilor = | 268 AccountReconcilor* reconcilor = |
| 260 AccountReconcilorFactory::GetForProfile(profile()); | 269 AccountReconcilorFactory::GetForProfile(profile()); |
| 261 ASSERT_TRUE(reconcilor); | 270 ASSERT_TRUE(reconcilor); |
| 262 | 271 |
| 263 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), "", | 272 SetFakeResponse(list_accounts_url().spec(), "", |
| 264 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); | 273 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); |
| 265 | 274 |
| 266 reconcilor->StartReconcile(); | 275 reconcilor->StartReconcile(); |
| 267 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 276 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 268 | 277 |
| 269 base::RunLoop().RunUntilIdle(); | 278 base::RunLoop().RunUntilIdle(); |
| 270 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 279 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 271 } | 280 } |
| 272 | 281 |
| 273 TEST_P(AccountReconcilorTest, StartReconcileNoop) { | 282 TEST_P(AccountReconcilorTest, StartReconcileNoop) { |
| 274 signin_manager()->SetAuthenticatedUsername(kTestEmail); | 283 signin_manager()->SetAuthenticatedUsername(kTestEmail); |
| 275 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); | 284 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
| 276 | 285 |
| 277 AccountReconcilor* reconcilor = | 286 AccountReconcilor* reconcilor = |
| 278 AccountReconcilorFactory::GetForProfile(profile()); | 287 AccountReconcilorFactory::GetForProfile(profile()); |
| 279 ASSERT_TRUE(reconcilor); | 288 ASSERT_TRUE(reconcilor); |
| 280 | 289 |
| 281 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 290 SetFakeResponse(list_accounts_url().spec(), |
| 282 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 291 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 283 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 292 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 284 | 293 |
| 285 reconcilor->StartReconcile(); | 294 reconcilor->StartReconcile(); |
| 286 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 295 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 287 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 296 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 288 | 297 |
| 289 base::RunLoop().RunUntilIdle(); | 298 base::RunLoop().RunUntilIdle(); |
| 290 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 299 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 291 | 300 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 306 // token service, will be considered the same as "dots@gmail.com" as returned | 315 // token service, will be considered the same as "dots@gmail.com" as returned |
| 307 // by gaia::ParseListAccountsData(). | 316 // by gaia::ParseListAccountsData(). |
| 308 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { | 317 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { |
| 309 signin_manager()->SetAuthenticatedUsername("Dot.S@gmail.com"); | 318 signin_manager()->SetAuthenticatedUsername("Dot.S@gmail.com"); |
| 310 token_service()->UpdateCredentials("Dot.S@gmail.com", "refresh_token"); | 319 token_service()->UpdateCredentials("Dot.S@gmail.com", "refresh_token"); |
| 311 | 320 |
| 312 AccountReconcilor* reconcilor = | 321 AccountReconcilor* reconcilor = |
| 313 AccountReconcilorFactory::GetForProfile(profile()); | 322 AccountReconcilorFactory::GetForProfile(profile()); |
| 314 ASSERT_TRUE(reconcilor); | 323 ASSERT_TRUE(reconcilor); |
| 315 | 324 |
| 316 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 325 SetFakeResponse(list_accounts_url().spec(), |
| 317 "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 326 "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 318 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 327 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 319 | 328 |
| 320 reconcilor->StartReconcile(); | 329 reconcilor->StartReconcile(); |
| 321 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 330 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 322 | 331 |
| 323 base::RunLoop().RunUntilIdle(); | 332 base::RunLoop().RunUntilIdle(); |
| 324 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 333 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 325 | 334 |
| 326 histogram_tester()->ExpectUniqueSample( | 335 histogram_tester()->ExpectUniqueSample( |
| 327 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 336 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 328 signin_metrics::ACCOUNTS_SAME, | 337 signin_metrics::ACCOUNTS_SAME, |
| 329 1); | 338 1); |
| 330 } | 339 } |
| 331 | 340 |
| 332 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { | 341 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { |
| 333 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 342 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 334 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 343 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 335 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 344 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 336 | 345 |
| 337 AccountReconcilor* reconcilor = | 346 AccountReconcilor* reconcilor = |
| 338 AccountReconcilorFactory::GetForProfile(profile()); | 347 AccountReconcilorFactory::GetForProfile(profile()); |
| 339 ASSERT_TRUE(reconcilor); | 348 ASSERT_TRUE(reconcilor); |
| 340 | 349 |
| 341 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 350 SetFakeResponse(list_accounts_url().spec(), |
| 342 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 351 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 343 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 352 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 344 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 353 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 345 | 354 |
| 346 reconcilor->StartReconcile(); | 355 reconcilor->StartReconcile(); |
| 347 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); | 356 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); |
| 348 base::RunLoop().RunUntilIdle(); | 357 base::RunLoop().RunUntilIdle(); |
| 349 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 358 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 350 | 359 |
| 351 histogram_tester()->ExpectTotalCount( | 360 histogram_tester()->ExpectTotalCount( |
| 352 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); | 361 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
| 353 histogram_tester()->ExpectUniqueSample( | 362 histogram_tester()->ExpectUniqueSample( |
| 354 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 363 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 355 signin_metrics::ACCOUNTS_SAME, | 364 signin_metrics::ACCOUNTS_SAME, |
| 356 1); | 365 1); |
| 357 } | 366 } |
| 358 | 367 |
| 359 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { | 368 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { |
| 360 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 369 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 361 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 370 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 362 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 371 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 363 | 372 |
| 364 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); | 373 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); |
| 365 | 374 |
| 366 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 375 SetFakeResponse(list_accounts_url().spec(), |
| 367 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 376 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 368 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 377 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 369 | 378 |
| 370 AccountReconcilor* reconcilor = GetMockReconcilor(); | 379 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 371 reconcilor->StartReconcile(); | 380 reconcilor->StartReconcile(); |
| 372 | 381 |
| 373 base::RunLoop().RunUntilIdle(); | 382 base::RunLoop().RunUntilIdle(); |
| 374 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 383 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 375 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", | 384 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", |
| 376 GoogleServiceAuthError::AuthErrorNone()); | 385 GoogleServiceAuthError::AuthErrorNone()); |
| 377 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 386 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 378 | 387 |
| 379 histogram_tester()->ExpectUniqueSample( | 388 histogram_tester()->ExpectUniqueSample( |
| 380 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 389 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 381 signin_metrics::ACCOUNTS_SAME, | 390 signin_metrics::ACCOUNTS_SAME, |
| 382 1); | 391 1); |
| 383 histogram_tester()->ExpectUniqueSample( | 392 histogram_tester()->ExpectUniqueSample( |
| 384 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 393 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 385 histogram_tester()->ExpectUniqueSample( | 394 histogram_tester()->ExpectUniqueSample( |
| 386 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 395 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 387 } | 396 } |
| 388 | 397 |
| 389 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) { | 398 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) { |
| 390 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 399 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 391 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 400 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 392 | 401 |
| 393 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 402 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 394 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); | 403 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); |
| 395 | 404 |
| 396 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 405 SetFakeResponse(list_accounts_url().spec(), |
| 397 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 406 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 398 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 407 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 399 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 408 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 400 | 409 |
| 401 AccountReconcilor* reconcilor = GetMockReconcilor(); | 410 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 402 reconcilor->StartReconcile(); | 411 reconcilor->StartReconcile(); |
| 403 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 412 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 404 | 413 |
| 405 base::RunLoop().RunUntilIdle(); | 414 base::RunLoop().RunUntilIdle(); |
| 406 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", | 415 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
| (...skipping 12 matching lines...) Expand all Loading... |
| 419 | 428 |
| 420 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { | 429 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { |
| 421 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 430 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 422 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 431 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 423 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 432 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 424 | 433 |
| 425 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); | 434 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); |
| 426 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); | 435 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); |
| 427 | 436 |
| 428 SetFakeResponse( | 437 SetFakeResponse( |
| 429 GaiaUrls::GetInstance()->list_accounts_url().spec(), | 438 list_accounts_url().spec(), |
| 430 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 439 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 431 net::HTTP_OK, | 440 net::HTTP_OK, |
| 432 net::URLRequestStatus::SUCCESS); | 441 net::URLRequestStatus::SUCCESS); |
| 433 | 442 |
| 434 AccountReconcilor* reconcilor = GetMockReconcilor(); | 443 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 435 reconcilor->StartReconcile(); | 444 reconcilor->StartReconcile(); |
| 436 | 445 |
| 437 base::RunLoop().RunUntilIdle(); | 446 base::RunLoop().RunUntilIdle(); |
| 438 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 447 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 439 SimulateMergeSessionCompleted( | 448 SimulateMergeSessionCompleted( |
| 440 reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); | 449 reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); |
| 441 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 450 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 442 | 451 |
| 443 histogram_tester()->ExpectUniqueSample( | 452 histogram_tester()->ExpectUniqueSample( |
| 444 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 453 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 445 signin_metrics::ACCOUNTS_SAME, | 454 signin_metrics::ACCOUNTS_SAME, |
| 446 1); | 455 1); |
| 447 histogram_tester()->ExpectUniqueSample( | 456 histogram_tester()->ExpectUniqueSample( |
| 448 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 457 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 449 histogram_tester()->ExpectUniqueSample( | 458 histogram_tester()->ExpectUniqueSample( |
| 450 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 459 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 451 | 460 |
| 452 // Do another pass after I've added a third account to the token service | 461 // Do another pass after I've added a third account to the token service |
| 453 | 462 |
| 454 SetFakeResponse( | 463 SetFakeResponse( |
| 455 GaiaUrls::GetInstance()->list_accounts_url().spec(), | 464 list_accounts_url().spec(), |
| 456 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 465 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 457 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 466 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 458 net::HTTP_OK, | 467 net::HTTP_OK, |
| 459 net::URLRequestStatus::SUCCESS); | 468 net::URLRequestStatus::SUCCESS); |
| 460 // This will cause the reconcilor to fire. | 469 // This will cause the reconcilor to fire. |
| 461 token_service()->UpdateCredentials("third@gmail.com", "refresh_token"); | 470 token_service()->UpdateCredentials("third@gmail.com", "refresh_token"); |
| 462 | 471 |
| 463 base::RunLoop().RunUntilIdle(); | 472 base::RunLoop().RunUntilIdle(); |
| 464 | 473 |
| 465 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 474 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 487 | 496 |
| 488 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { | 497 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { |
| 489 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 498 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 490 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 499 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 491 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 500 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 492 | 501 |
| 493 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 502 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 494 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); | 503 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); |
| 495 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); | 504 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); |
| 496 | 505 |
| 497 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 506 SetFakeResponse(list_accounts_url().spec(), |
| 498 "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 507 "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 499 "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 508 "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 500 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 509 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 501 | 510 |
| 502 AccountReconcilor* reconcilor = GetMockReconcilor(); | 511 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 503 reconcilor->StartReconcile(); | 512 reconcilor->StartReconcile(); |
| 504 | 513 |
| 505 base::RunLoop().RunUntilIdle(); | 514 base::RunLoop().RunUntilIdle(); |
| 506 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 515 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 507 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", | 516 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", |
| (...skipping 14 matching lines...) Expand all Loading... |
| 522 } | 531 } |
| 523 | 532 |
| 524 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { | 533 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { |
| 525 signin_manager()->SetAuthenticatedUsername(kTestEmail); | 534 signin_manager()->SetAuthenticatedUsername(kTestEmail); |
| 526 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); | 535 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
| 527 | 536 |
| 528 AccountReconcilor* reconcilor = | 537 AccountReconcilor* reconcilor = |
| 529 AccountReconcilorFactory::GetForProfile(profile()); | 538 AccountReconcilorFactory::GetForProfile(profile()); |
| 530 ASSERT_TRUE(reconcilor); | 539 ASSERT_TRUE(reconcilor); |
| 531 | 540 |
| 532 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 541 SetFakeResponse(list_accounts_url().spec(), |
| 533 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 542 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 534 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 543 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 535 | 544 |
| 536 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 545 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 537 reconcilor->StartReconcile(); | 546 reconcilor->StartReconcile(); |
| 538 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 547 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 539 | 548 |
| 540 base::RunLoop().RunUntilIdle(); | 549 base::RunLoop().RunUntilIdle(); |
| 541 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 550 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 542 } | 551 } |
| 543 | 552 |
| 544 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { | 553 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
| 545 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 554 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 546 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 555 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 547 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 556 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 548 | 557 |
| 549 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); | 558 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); |
| 550 | 559 |
| 551 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 560 SetFakeResponse(list_accounts_url().spec(), |
| 552 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]," | 561 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]," |
| 553 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 562 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 554 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 563 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 555 | 564 |
| 556 AccountReconcilor* reconcilor = | 565 AccountReconcilor* reconcilor = |
| 557 AccountReconcilorFactory::GetForProfile(profile()); | 566 AccountReconcilorFactory::GetForProfile(profile()); |
| 558 ASSERT_TRUE(reconcilor); | 567 ASSERT_TRUE(reconcilor); |
| 559 | 568 |
| 560 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 569 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 561 reconcilor->StartReconcile(); | 570 reconcilor->StartReconcile(); |
| 562 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 571 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 563 | 572 |
| 564 base::RunLoop().RunUntilIdle(); | 573 base::RunLoop().RunUntilIdle(); |
| 565 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", | 574 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
| 566 GoogleServiceAuthError::AuthErrorNone()); | 575 GoogleServiceAuthError::AuthErrorNone()); |
| 567 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 576 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 568 } | 577 } |
| 569 | 578 |
| 570 TEST_F(AccountReconcilorTest, MergeSessionCompletedWithBogusAccount) { | 579 TEST_F(AccountReconcilorTest, MergeSessionCompletedWithBogusAccount) { |
| 571 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 580 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 572 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 581 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 573 | 582 |
| 574 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); | 583 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); |
| 575 | 584 |
| 576 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 585 SetFakeResponse(list_accounts_url().spec(), |
| 577 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", | 586 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", |
| 578 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 587 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 579 | 588 |
| 580 AccountReconcilor* reconcilor = | 589 AccountReconcilor* reconcilor = |
| 581 AccountReconcilorFactory::GetForProfile(profile()); | 590 AccountReconcilorFactory::GetForProfile(profile()); |
| 582 ASSERT_TRUE(reconcilor); | 591 ASSERT_TRUE(reconcilor); |
| 583 | 592 |
| 584 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 593 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 585 reconcilor->StartReconcile(); | 594 reconcilor->StartReconcile(); |
| 586 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 595 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 587 | 596 |
| 588 base::RunLoop().RunUntilIdle(); | 597 base::RunLoop().RunUntilIdle(); |
| 589 | 598 |
| 590 // If an unknown account id is sent, it should not upset the state. | 599 // If an unknown account id is sent, it should not upset the state. |
| 591 SimulateMergeSessionCompleted(reconcilor, "bogus@gmail.com", | 600 SimulateMergeSessionCompleted(reconcilor, "bogus@gmail.com", |
| 592 GoogleServiceAuthError::AuthErrorNone()); | 601 GoogleServiceAuthError::AuthErrorNone()); |
| 593 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 602 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 594 | 603 |
| 595 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", | 604 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
| 596 GoogleServiceAuthError::AuthErrorNone()); | 605 GoogleServiceAuthError::AuthErrorNone()); |
| 597 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 606 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 598 } | 607 } |
| 599 | 608 |
| 600 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, | 609 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, |
| 601 AccountReconcilorTest, | 610 AccountReconcilorTest, |
| 602 testing::Bool()); | 611 testing::Bool()); |
| 603 | 612 |
| OLD | NEW |