| 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/time/time.h" | 10 #include "base/time/time.h" |
| 10 #include "build/build_config.h" | 11 #include "build/build_config.h" |
| 11 #include "chrome/browser/prefs/pref_service_syncable.h" | 12 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 12 #include "chrome/browser/signin/account_reconcilor_factory.h" | 13 #include "chrome/browser/signin/account_reconcilor_factory.h" |
| 13 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 14 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
| 14 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 15 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
| 15 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" | 16 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
| 16 #include "chrome/browser/signin/fake_signin_manager.h" | 17 #include "chrome/browser/signin/fake_signin_manager.h" |
| 17 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 18 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 18 #include "chrome/browser/signin/signin_manager_factory.h" | 19 #include "chrome/browser/signin/signin_manager_factory.h" |
| 19 #include "chrome/browser/signin/test_signin_client_builder.h" | 20 #include "chrome/browser/signin/test_signin_client_builder.h" |
| 20 #include "chrome/test/base/testing_browser_process.h" | 21 #include "chrome/test/base/testing_browser_process.h" |
| 21 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
| 22 #include "chrome/test/base/testing_profile_manager.h" | 23 #include "chrome/test/base/testing_profile_manager.h" |
| 23 #include "chrome/test/base/uma_histogram_helper.h" | |
| 24 #include "components/signin/core/browser/account_reconcilor.h" | 24 #include "components/signin/core/browser/account_reconcilor.h" |
| 25 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 25 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 26 #include "components/signin/core/browser/signin_manager.h" | 26 #include "components/signin/core/browser/signin_manager.h" |
| 27 #include "components/signin/core/browser/signin_metrics.h" | 27 #include "components/signin/core/browser/signin_metrics.h" |
| 28 #include "components/signin/core/common/profile_management_switches.h" | 28 #include "components/signin/core/common/profile_management_switches.h" |
| 29 #include "components/signin/core/common/signin_switches.h" | 29 #include "components/signin/core/common/signin_switches.h" |
| 30 #include "content/public/test/test_browser_thread_bundle.h" | 30 #include "content/public/test/test_browser_thread_bundle.h" |
| 31 #include "google_apis/gaia/gaia_urls.h" | 31 #include "google_apis/gaia/gaia_urls.h" |
| 32 #include "net/url_request/test_url_fetcher_factory.h" | 32 #include "net/url_request/test_url_fetcher_factory.h" |
| 33 #include "testing/gmock/include/gmock/gmock.h" | 33 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| 38 const char kTestEmail[] = "user@gmail.com"; | 38 const char kTestEmail[] = "user@gmail.com"; |
| 39 const char* const kHistogramsToSnapshot[] = { | |
| 40 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | |
| 41 "Signin.Reconciler.AddedToCookieJar.FirstRun", | |
| 42 "Signin.Reconciler.AddedToChrome.FirstRun", | |
| 43 "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", | |
| 44 "Signin.Reconciler.AddedToCookieJar.SubsequentRun", | |
| 45 "Signin.Reconciler.AddedToChrome.SubsequentRun"}; | |
| 46 | 39 |
| 47 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { | 40 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { |
| 48 public: | 41 public: |
| 49 static KeyedService* Build(content::BrowserContext* context); | 42 static KeyedService* Build(content::BrowserContext* context); |
| 50 | 43 |
| 51 MockAccountReconcilor(ProfileOAuth2TokenService* token_service, | 44 MockAccountReconcilor(ProfileOAuth2TokenService* token_service, |
| 52 SigninManagerBase* signin_manager, | 45 SigninManagerBase* signin_manager, |
| 53 SigninClient* client); | 46 SigninClient* client); |
| 54 virtual ~MockAccountReconcilor() {} | 47 virtual ~MockAccountReconcilor() {} |
| 55 | 48 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 } // namespace | 82 } // namespace |
| 90 | 83 |
| 91 class AccountReconcilorTest : public ::testing::TestWithParam<bool> { | 84 class AccountReconcilorTest : public ::testing::TestWithParam<bool> { |
| 92 public: | 85 public: |
| 93 AccountReconcilorTest(); | 86 AccountReconcilorTest(); |
| 94 virtual void SetUp() OVERRIDE; | 87 virtual void SetUp() OVERRIDE; |
| 95 | 88 |
| 96 TestingProfile* profile() { return profile_; } | 89 TestingProfile* profile() { return profile_; } |
| 97 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } | 90 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } |
| 98 FakeProfileOAuth2TokenService* token_service() { return token_service_; } | 91 FakeProfileOAuth2TokenService* token_service() { return token_service_; } |
| 99 UMAHistogramHelper* histogram_helper() { return &histogram_helper_; } | 92 base::HistogramTester* histogram_tester() { return &histogram_tester_; } |
| 100 | 93 |
| 101 void SetFakeResponse(const std::string& url, | 94 void SetFakeResponse(const std::string& url, |
| 102 const std::string& data, | 95 const std::string& data, |
| 103 net::HttpStatusCode code, | 96 net::HttpStatusCode code, |
| 104 net::URLRequestStatus::Status status) { | 97 net::URLRequestStatus::Status status) { |
| 105 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); | 98 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); |
| 106 } | 99 } |
| 107 | 100 |
| 108 MockAccountReconcilor* GetMockReconcilor(); | 101 MockAccountReconcilor* GetMockReconcilor(); |
| 109 | 102 |
| 110 void SimulateMergeSessionCompleted( | 103 void SimulateMergeSessionCompleted( |
| 111 MergeSessionHelper::Observer* observer, | 104 MergeSessionHelper::Observer* observer, |
| 112 const std::string& account_id, | 105 const std::string& account_id, |
| 113 const GoogleServiceAuthError& error); | 106 const GoogleServiceAuthError& error); |
| 114 | 107 |
| 115 void SimulateRefreshTokenFetched( | 108 void SimulateRefreshTokenFetched( |
| 116 AccountReconcilor* reconcilor, | 109 AccountReconcilor* reconcilor, |
| 117 const std::string& account_id, | 110 const std::string& account_id, |
| 118 const std::string& refresh_token); | 111 const std::string& refresh_token); |
| 119 | 112 |
| 120 private: | 113 private: |
| 121 content::TestBrowserThreadBundle bundle_; | 114 content::TestBrowserThreadBundle bundle_; |
| 122 TestingProfile* profile_; | 115 TestingProfile* profile_; |
| 123 FakeSigninManagerForTesting* signin_manager_; | 116 FakeSigninManagerForTesting* signin_manager_; |
| 124 FakeProfileOAuth2TokenService* token_service_; | 117 FakeProfileOAuth2TokenService* token_service_; |
| 125 MockAccountReconcilor* mock_reconcilor_; | 118 MockAccountReconcilor* mock_reconcilor_; |
| 126 net::FakeURLFetcherFactory url_fetcher_factory_; | 119 net::FakeURLFetcherFactory url_fetcher_factory_; |
| 127 scoped_ptr<TestingProfileManager> testing_profile_manager_; | 120 scoped_ptr<TestingProfileManager> testing_profile_manager_; |
| 128 UMAHistogramHelper histogram_helper_; | 121 base::HistogramTester histogram_tester_; |
| 129 | 122 |
| 130 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); | 123 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); |
| 131 }; | 124 }; |
| 132 | 125 |
| 133 AccountReconcilorTest::AccountReconcilorTest() | 126 AccountReconcilorTest::AccountReconcilorTest() |
| 134 : signin_manager_(NULL), | 127 : signin_manager_(NULL), |
| 135 token_service_(NULL), | 128 token_service_(NULL), |
| 136 mock_reconcilor_(NULL), | 129 mock_reconcilor_(NULL), |
| 137 url_fetcher_factory_(NULL) {} | 130 url_fetcher_factory_(NULL) {} |
| 138 | 131 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 164 base::UTF8ToUTF16("name"), 0, std::string(), | 157 base::UTF8ToUTF16("name"), 0, std::string(), |
| 165 factories); | 158 factories); |
| 166 | 159 |
| 167 signin_manager_ = | 160 signin_manager_ = |
| 168 static_cast<FakeSigninManagerForTesting*>( | 161 static_cast<FakeSigninManagerForTesting*>( |
| 169 SigninManagerFactory::GetForProfile(profile())); | 162 SigninManagerFactory::GetForProfile(profile())); |
| 170 | 163 |
| 171 token_service_ = | 164 token_service_ = |
| 172 static_cast<FakeProfileOAuth2TokenService*>( | 165 static_cast<FakeProfileOAuth2TokenService*>( |
| 173 ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); | 166 ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); |
| 174 | |
| 175 // Take a new snapshot of the concerned histograms before each test | |
| 176 histogram_helper_.PrepareSnapshot(kHistogramsToSnapshot, | |
| 177 arraysize(kHistogramsToSnapshot)); | |
| 178 } | 167 } |
| 179 | 168 |
| 180 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { | 169 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { |
| 181 if (!mock_reconcilor_) { | 170 if (!mock_reconcilor_) { |
| 182 mock_reconcilor_ = | 171 mock_reconcilor_ = |
| 183 static_cast<MockAccountReconcilor*>( | 172 static_cast<MockAccountReconcilor*>( |
| 184 AccountReconcilorFactory::GetForProfile(profile())); | 173 AccountReconcilorFactory::GetForProfile(profile())); |
| 185 } | 174 } |
| 186 | 175 |
| 187 return mock_reconcilor_; | 176 return mock_reconcilor_; |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 ASSERT_EQ(1u, reconcilor->GetGaiaAccountsForTesting().size()); | 374 ASSERT_EQ(1u, reconcilor->GetGaiaAccountsForTesting().size()); |
| 386 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); | 375 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); |
| 387 | 376 |
| 388 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", | 377 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", |
| 389 base::Time::Now() + base::TimeDelta::FromHours(1)); | 378 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 390 | 379 |
| 391 base::RunLoop().RunUntilIdle(); | 380 base::RunLoop().RunUntilIdle(); |
| 392 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); | 381 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
| 393 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 382 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 394 | 383 |
| 395 histogram_helper()->Fetch(); | 384 histogram_tester()->ExpectTotalCount( |
| 396 histogram_helper()->ExpectTotalCount( | |
| 397 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); | 385 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
| 398 histogram_helper()->ExpectUniqueSample( | 386 histogram_tester()->ExpectUniqueSample( |
| 399 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 387 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 400 signin_metrics::ACCOUNTS_SAME, | 388 signin_metrics::ACCOUNTS_SAME, |
| 401 1); | 389 1); |
| 402 } | 390 } |
| 403 | 391 |
| 404 // This is test is needed until chrome changes to use gaia obfuscated id. | 392 // This is test is needed until chrome changes to use gaia obfuscated id. |
| 405 // The signin manager and token service use the gaia "email" property, which | 393 // The signin manager and token service use the gaia "email" property, which |
| 406 // preserves dots in usernames and preserves case. gaia::ParseListAccountsData() | 394 // preserves dots in usernames and preserves case. gaia::ParseListAccountsData() |
| 407 // however uses gaia "displayEmail" which does not preserve case, and then | 395 // however uses gaia "displayEmail" which does not preserve case, and then |
| 408 // passes the string through gaia::CanonicalizeEmail() which removes dots. This | 396 // passes the string through gaia::CanonicalizeEmail() which removes dots. This |
| (...skipping 25 matching lines...) Expand all Loading... |
| 434 reconcilor->GetGaiaAccountsForTesting()[0].first.c_str()); | 422 reconcilor->GetGaiaAccountsForTesting()[0].first.c_str()); |
| 435 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); | 423 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); |
| 436 | 424 |
| 437 token_service()->IssueAllTokensForAccount("Dot.S@gmail.com", "access_token", | 425 token_service()->IssueAllTokensForAccount("Dot.S@gmail.com", "access_token", |
| 438 base::Time::Now() + base::TimeDelta::FromHours(1)); | 426 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 439 | 427 |
| 440 base::RunLoop().RunUntilIdle(); | 428 base::RunLoop().RunUntilIdle(); |
| 441 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); | 429 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
| 442 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 430 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 443 | 431 |
| 444 histogram_helper()->Fetch(); | 432 histogram_tester()->ExpectUniqueSample( |
| 445 histogram_helper()->ExpectUniqueSample( | |
| 446 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 433 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 447 signin_metrics::ACCOUNTS_SAME, | 434 signin_metrics::ACCOUNTS_SAME, |
| 448 1); | 435 1); |
| 449 } | 436 } |
| 450 | 437 |
| 451 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { | 438 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { |
| 452 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 439 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 453 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 440 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 454 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 441 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 455 | 442 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 479 base::RunLoop().RunUntilIdle(); | 466 base::RunLoop().RunUntilIdle(); |
| 480 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); | 467 ASSERT_FALSE(reconcilor->AreAllRefreshTokensChecked()); |
| 481 | 468 |
| 482 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", | 469 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", |
| 483 base::Time::Now() + base::TimeDelta::FromHours(1)); | 470 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 484 | 471 |
| 485 base::RunLoop().RunUntilIdle(); | 472 base::RunLoop().RunUntilIdle(); |
| 486 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); | 473 ASSERT_TRUE(reconcilor->AreAllRefreshTokensChecked()); |
| 487 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 474 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 488 | 475 |
| 489 histogram_helper()->Fetch(); | 476 histogram_tester()->ExpectTotalCount( |
| 490 histogram_helper()->ExpectTotalCount( | |
| 491 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); | 477 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); |
| 492 histogram_helper()->ExpectUniqueSample( | 478 histogram_tester()->ExpectUniqueSample( |
| 493 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 479 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 494 signin_metrics::ACCOUNTS_SAME, | 480 signin_metrics::ACCOUNTS_SAME, |
| 495 1); | 481 1); |
| 496 } | 482 } |
| 497 | 483 |
| 498 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { | 484 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { |
| 499 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 485 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 500 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 486 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 501 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 487 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 502 | 488 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 514 base::Time::Now() + base::TimeDelta::FromHours(1)); | 500 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 515 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", | 501 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", |
| 516 base::Time::Now() + base::TimeDelta::FromHours(1)); | 502 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 517 | 503 |
| 518 base::RunLoop().RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
| 519 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 505 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 520 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", | 506 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", |
| 521 GoogleServiceAuthError::AuthErrorNone()); | 507 GoogleServiceAuthError::AuthErrorNone()); |
| 522 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 508 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 523 | 509 |
| 524 histogram_helper()->Fetch(); | 510 histogram_tester()->ExpectUniqueSample( |
| 525 histogram_helper()->ExpectUniqueSample( | |
| 526 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 511 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 527 signin_metrics::ACCOUNTS_SAME, | 512 signin_metrics::ACCOUNTS_SAME, |
| 528 1); | 513 1); |
| 529 histogram_helper()->ExpectUniqueSample( | 514 histogram_tester()->ExpectUniqueSample( |
| 530 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 515 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 531 histogram_helper()->ExpectUniqueSample( | 516 histogram_tester()->ExpectUniqueSample( |
| 532 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); | 517 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
| 533 } | 518 } |
| 534 | 519 |
| 535 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { | 520 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { |
| 536 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 521 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 537 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 522 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 538 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 523 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 539 | 524 |
| 540 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); | 525 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); |
| 541 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); | 526 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 560 "user@gmail.com", | 545 "user@gmail.com", |
| 561 "access_token", | 546 "access_token", |
| 562 base::Time::Now() + base::TimeDelta::FromHours(1)); | 547 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 563 | 548 |
| 564 base::RunLoop().RunUntilIdle(); | 549 base::RunLoop().RunUntilIdle(); |
| 565 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 550 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 566 SimulateMergeSessionCompleted( | 551 SimulateMergeSessionCompleted( |
| 567 reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); | 552 reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); |
| 568 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 553 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 569 | 554 |
| 570 histogram_helper()->Fetch(); | 555 histogram_tester()->ExpectUniqueSample( |
| 571 histogram_helper()->ExpectUniqueSample( | |
| 572 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 556 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 573 signin_metrics::ACCOUNTS_SAME, | 557 signin_metrics::ACCOUNTS_SAME, |
| 574 1); | 558 1); |
| 575 histogram_helper()->ExpectUniqueSample( | 559 histogram_tester()->ExpectUniqueSample( |
| 576 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 560 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 577 histogram_helper()->ExpectUniqueSample( | 561 histogram_tester()->ExpectUniqueSample( |
| 578 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); | 562 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
| 579 | 563 |
| 580 // Do another pass after I've added a third account to the token service | 564 // Do another pass after I've added a third account to the token service |
| 581 | 565 |
| 582 SetFakeResponse( | 566 SetFakeResponse( |
| 583 GaiaUrls::GetInstance()->list_accounts_url().spec(), | 567 GaiaUrls::GetInstance()->list_accounts_url().spec(), |
| 584 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 568 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 585 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 569 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 586 net::HTTP_OK, | 570 net::HTTP_OK, |
| 587 net::URLRequestStatus::SUCCESS); | 571 net::URLRequestStatus::SUCCESS); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 601 "access_token", | 585 "access_token", |
| 602 base::Time::Now() + base::TimeDelta::FromHours(1)); | 586 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 603 | 587 |
| 604 base::RunLoop().RunUntilIdle(); | 588 base::RunLoop().RunUntilIdle(); |
| 605 | 589 |
| 606 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 590 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 607 SimulateMergeSessionCompleted( | 591 SimulateMergeSessionCompleted( |
| 608 reconcilor, "third@gmail.com", GoogleServiceAuthError::AuthErrorNone()); | 592 reconcilor, "third@gmail.com", GoogleServiceAuthError::AuthErrorNone()); |
| 609 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 593 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 610 | 594 |
| 611 histogram_helper()->Fetch(); | 595 histogram_tester()->ExpectUniqueSample( |
| 612 histogram_helper()->ExpectUniqueSample( | |
| 613 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 596 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 614 signin_metrics::ACCOUNTS_SAME, | 597 signin_metrics::ACCOUNTS_SAME, |
| 615 1); | 598 1); |
| 616 histogram_helper()->ExpectUniqueSample( | 599 histogram_tester()->ExpectUniqueSample( |
| 617 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 600 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 618 histogram_helper()->ExpectUniqueSample( | 601 histogram_tester()->ExpectUniqueSample( |
| 619 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); | 602 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
| 620 histogram_helper()->ExpectUniqueSample( | 603 histogram_tester()->ExpectUniqueSample( |
| 621 "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", | 604 "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", |
| 622 signin_metrics::ACCOUNTS_SAME, | 605 signin_metrics::ACCOUNTS_SAME, |
| 623 1); | 606 1); |
| 624 histogram_helper()->ExpectUniqueSample( | 607 histogram_tester()->ExpectUniqueSample( |
| 625 "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1); | 608 "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1); |
| 626 histogram_helper()->ExpectUniqueSample( | 609 histogram_tester()->ExpectUniqueSample( |
| 627 "Signin.Reconciler.AddedToChrome.SubsequentRun", 0, 1); | 610 "Signin.Reconciler.AddedToChrome.SubsequentRun", 0, 1); |
| 628 } | 611 } |
| 629 | 612 |
| 630 TEST_P(AccountReconcilorTest, StartReconcileAddToChrome) { | 613 TEST_P(AccountReconcilorTest, StartReconcileAddToChrome) { |
| 631 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 614 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 632 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 615 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 633 | 616 |
| 634 EXPECT_CALL(*GetMockReconcilor(), | 617 EXPECT_CALL(*GetMockReconcilor(), |
| 635 PerformAddToChromeAction("other@gmail.com", 1, "")); | 618 PerformAddToChromeAction("other@gmail.com", 1, "")); |
| 636 | 619 |
| 637 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), | 620 SetFakeResponse(GaiaUrls::GetInstance()->list_accounts_url().spec(), |
| 638 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " | 621 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " |
| 639 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", | 622 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", |
| 640 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 623 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 641 SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", | 624 SetFakeResponse("https://www.googleapis.com/oauth2/v1/userinfo", |
| 642 "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 625 "{\"id\":\"foo\"}", net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 643 | 626 |
| 644 AccountReconcilor* reconcilor = GetMockReconcilor(); | 627 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 645 reconcilor->StartReconcile(); | 628 reconcilor->StartReconcile(); |
| 646 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", | 629 token_service()->IssueAllTokensForAccount("user@gmail.com", "access_token", |
| 647 base::Time::Now() + base::TimeDelta::FromHours(1)); | 630 base::Time::Now() + base::TimeDelta::FromHours(1)); |
| 648 | 631 |
| 649 base::RunLoop().RunUntilIdle(); | 632 base::RunLoop().RunUntilIdle(); |
| 650 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 633 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 651 SimulateRefreshTokenFetched(reconcilor, "other@gmail.com", ""); | 634 SimulateRefreshTokenFetched(reconcilor, "other@gmail.com", ""); |
| 652 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 635 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 653 | 636 |
| 654 histogram_helper()->Fetch(); | 637 histogram_tester()->ExpectUniqueSample( |
| 655 histogram_helper()->ExpectUniqueSample( | |
| 656 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 638 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 657 signin_metrics::ACCOUNTS_SAME, | 639 signin_metrics::ACCOUNTS_SAME, |
| 658 1); | 640 1); |
| 659 histogram_helper()->ExpectUniqueSample( | 641 histogram_tester()->ExpectUniqueSample( |
| 660 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); | 642 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); |
| 661 histogram_helper()->ExpectUniqueSample( | 643 histogram_tester()->ExpectUniqueSample( |
| 662 "Signin.Reconciler.AddedToChrome.FirstRun", 1, 1); | 644 "Signin.Reconciler.AddedToChrome.FirstRun", 1, 1); |
| 663 } | 645 } |
| 664 | 646 |
| 665 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { | 647 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { |
| 666 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); | 648 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); |
| 667 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); | 649 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); |
| 668 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); | 650 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); |
| 669 | 651 |
| 670 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 652 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 671 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); | 653 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 687 | 669 |
| 688 base::RunLoop().RunUntilIdle(); | 670 base::RunLoop().RunUntilIdle(); |
| 689 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 671 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 690 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", | 672 SimulateMergeSessionCompleted(reconcilor, "other@gmail.com", |
| 691 GoogleServiceAuthError::AuthErrorNone()); | 673 GoogleServiceAuthError::AuthErrorNone()); |
| 692 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 674 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 693 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", | 675 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
| 694 GoogleServiceAuthError::AuthErrorNone()); | 676 GoogleServiceAuthError::AuthErrorNone()); |
| 695 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 677 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 696 | 678 |
| 697 histogram_helper()->Fetch(); | 679 histogram_tester()->ExpectUniqueSample( |
| 698 histogram_helper()->ExpectUniqueSample( | |
| 699 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 680 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 700 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, | 681 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, |
| 701 1); | 682 1); |
| 702 histogram_helper()->ExpectUniqueSample( | 683 histogram_tester()->ExpectUniqueSample( |
| 703 "Signin.Reconciler.AddedToCookieJar.FirstRun", 2, 1); | 684 "Signin.Reconciler.AddedToCookieJar.FirstRun", 2, 1); |
| 704 histogram_helper()->ExpectUniqueSample( | 685 histogram_tester()->ExpectUniqueSample( |
| 705 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); | 686 "Signin.Reconciler.AddedToChrome.FirstRun", 0, 1); |
| 706 } | 687 } |
| 707 | 688 |
| 708 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { | 689 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { |
| 709 signin_manager()->SetAuthenticatedUsername(kTestEmail); | 690 signin_manager()->SetAuthenticatedUsername(kTestEmail); |
| 710 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); | 691 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); |
| 711 | 692 |
| 712 AccountReconcilor* reconcilor = | 693 AccountReconcilor* reconcilor = |
| 713 AccountReconcilorFactory::GetForProfile(profile()); | 694 AccountReconcilorFactory::GetForProfile(profile()); |
| 714 ASSERT_TRUE(reconcilor); | 695 ASSERT_TRUE(reconcilor); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 | 775 |
| 795 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", | 776 SimulateMergeSessionCompleted(reconcilor, "user@gmail.com", |
| 796 GoogleServiceAuthError::AuthErrorNone()); | 777 GoogleServiceAuthError::AuthErrorNone()); |
| 797 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 778 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 798 } | 779 } |
| 799 | 780 |
| 800 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, | 781 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, |
| 801 AccountReconcilorTest, | 782 AccountReconcilorTest, |
| 802 testing::Bool()); | 783 testing::Bool()); |
| 803 | 784 |
| OLD | NEW |