| 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 "user@gmail.com", 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("user@gmail.com"); |
| 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 |
| 588 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 589 "user@gmail.com"); |
| 594 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 590 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 595 | 591 |
| 596 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); | 592 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); |
| 597 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id3)); | 593 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id3)); |
| 598 | 594 |
| 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(); | 595 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 606 reconcilor->StartReconcile(); | 596 reconcilor->StartReconcile(); |
| 607 | 597 |
| 608 base::RunLoop().RunUntilIdle(); | 598 base::RunLoop().RunUntilIdle(); |
| 609 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 599 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 610 SimulateAddAccountToCookieCompleted( | 600 SimulateAddAccountToCookieCompleted( |
| 611 reconcilor, account_id2, GoogleServiceAuthError::AuthErrorNone()); | 601 reconcilor, account_id2, GoogleServiceAuthError::AuthErrorNone()); |
| 612 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 602 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 613 | 603 |
| 614 histogram_tester()->ExpectUniqueSample( | 604 histogram_tester()->ExpectUniqueSample( |
| 615 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 605 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 616 signin_metrics::ACCOUNTS_SAME, | 606 signin_metrics::ACCOUNTS_SAME, |
| 617 1); | 607 1); |
| 618 histogram_tester()->ExpectUniqueSample( | 608 histogram_tester()->ExpectUniqueSample( |
| 619 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); | 609 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); |
| 620 histogram_tester()->ExpectUniqueSample( | 610 histogram_tester()->ExpectUniqueSample( |
| 621 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 611 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 622 | 612 |
| 623 // Do another pass after I've added a third account to the token service | 613 // Do another pass after I've added a third account to the token service |
| 614 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 615 "user@gmail.com", "other@gmail.com"); |
| 616 cookie_manager_service()->set_list_accounts_fetched_once_for_testing(false); |
| 624 | 617 |
| 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. | 618 // This will cause the reconcilor to fire. |
| 632 token_service()->UpdateCredentials(account_id3, "refresh_token"); | 619 token_service()->UpdateCredentials(account_id3, "refresh_token"); |
| 633 base::RunLoop().RunUntilIdle(); | 620 base::RunLoop().RunUntilIdle(); |
| 634 | 621 |
| 635 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 622 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 636 SimulateAddAccountToCookieCompleted( | 623 SimulateAddAccountToCookieCompleted( |
| 637 reconcilor, account_id3, GoogleServiceAuthError::AuthErrorNone()); | 624 reconcilor, account_id3, GoogleServiceAuthError::AuthErrorNone()); |
| 638 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 625 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 639 | 626 |
| 640 histogram_tester()->ExpectUniqueSample( | 627 histogram_tester()->ExpectUniqueSample( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 655 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1); | 642 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1); |
| 656 } | 643 } |
| 657 | 644 |
| 658 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { | 645 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { |
| 659 const std::string account_id = | 646 const std::string account_id = |
| 660 ConnectProfileToAccount("12345", "user@gmail.com"); | 647 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 661 const std::string account_id2 = | 648 const std::string account_id2 = |
| 662 PickAccountIdForAccount("67890", "other@gmail.com"); | 649 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 663 | 650 |
| 664 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 651 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 652 cookie_manager_service()->SetListAccountsResponseTwoAccounts( |
| 653 "other@gmail.com", "user@gmail.com"); |
| 665 | 654 |
| 666 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); | 655 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); |
| 667 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 656 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 668 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); | 657 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2)); |
| 669 | 658 |
| 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(); | 659 AccountReconcilor* reconcilor = GetMockReconcilor(); |
| 676 reconcilor->StartReconcile(); | 660 reconcilor->StartReconcile(); |
| 677 | 661 |
| 678 base::RunLoop().RunUntilIdle(); | 662 base::RunLoop().RunUntilIdle(); |
| 679 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 663 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 680 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, | 664 SimulateAddAccountToCookieCompleted(reconcilor, account_id2, |
| 681 GoogleServiceAuthError::AuthErrorNone()); | 665 GoogleServiceAuthError::AuthErrorNone()); |
| 682 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 666 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 683 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 667 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 684 GoogleServiceAuthError::AuthErrorNone()); | 668 GoogleServiceAuthError::AuthErrorNone()); |
| 685 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 669 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 686 | 670 |
| 687 histogram_tester()->ExpectUniqueSample( | 671 histogram_tester()->ExpectUniqueSample( |
| 688 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", | 672 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", |
| 689 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, | 673 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, |
| 690 1); | 674 1); |
| 691 histogram_tester()->ExpectUniqueSample( | 675 histogram_tester()->ExpectUniqueSample( |
| 692 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); | 676 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); |
| 693 histogram_tester()->ExpectUniqueSample( | 677 histogram_tester()->ExpectUniqueSample( |
| 694 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); | 678 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); |
| 695 } | 679 } |
| 696 | 680 |
| 697 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { | 681 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { |
| 698 const std::string account_id = | 682 const std::string account_id = |
| 699 ConnectProfileToAccount("12345", "user@gmail.com"); | 683 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 684 cookie_manager_service()->SetListAccountsResponseOneAccount( |
| 685 "user@gmail.com"); |
| 700 | 686 |
| 701 AccountReconcilor* reconcilor = | 687 AccountReconcilor* reconcilor = |
| 702 AccountReconcilorFactory::GetForProfile(profile()); | 688 AccountReconcilorFactory::GetForProfile(profile()); |
| 703 ASSERT_TRUE(reconcilor); | 689 ASSERT_TRUE(reconcilor); |
| 704 | 690 |
| 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_); | 691 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 710 reconcilor->StartReconcile(); | 692 reconcilor->StartReconcile(); |
| 711 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 693 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 712 | 694 |
| 713 base::RunLoop().RunUntilIdle(); | 695 base::RunLoop().RunUntilIdle(); |
| 714 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 696 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 715 } | 697 } |
| 716 | 698 |
| 717 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { | 699 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { |
| 718 const std::string account_id = | 700 const std::string account_id = |
| 719 ConnectProfileToAccount("12345", "user@gmail.com"); | 701 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 720 const std::string account_id2 = | 702 const std::string account_id2 = |
| 721 PickAccountIdForAccount("67890", "other@gmail.com"); | 703 PickAccountIdForAccount("67890", "other@gmail.com"); |
| 722 token_service()->UpdateCredentials(account_id2, "refresh_token"); | 704 token_service()->UpdateCredentials(account_id2, "refresh_token"); |
| 705 cookie_manager_service()->SetListAccountsResponseTwoAccountsWithExpiry( |
| 706 "user@gmail.com", true, "other@gmail.com", false); |
| 723 | 707 |
| 724 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 708 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 725 | 709 |
| 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 = | 710 AccountReconcilor* reconcilor = |
| 732 AccountReconcilorFactory::GetForProfile(profile()); | 711 AccountReconcilorFactory::GetForProfile(profile()); |
| 733 ASSERT_TRUE(reconcilor); | 712 ASSERT_TRUE(reconcilor); |
| 734 | 713 |
| 735 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 714 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 736 reconcilor->StartReconcile(); | 715 reconcilor->StartReconcile(); |
| 737 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 716 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 738 | 717 |
| 739 base::RunLoop().RunUntilIdle(); | 718 base::RunLoop().RunUntilIdle(); |
| 740 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 719 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 741 GoogleServiceAuthError::AuthErrorNone()); | 720 GoogleServiceAuthError::AuthErrorNone()); |
| 742 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 721 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 743 } | 722 } |
| 744 | 723 |
| 745 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) { | 724 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) { |
| 746 const std::string account_id = | 725 const std::string account_id = |
| 747 ConnectProfileToAccount("12345", "user@gmail.com"); | 726 ConnectProfileToAccount("12345", "user@gmail.com"); |
| 727 cookie_manager_service()->SetListAccountsResponseOneAccountWithExpiry( |
| 728 "user@gmail.com", true); |
| 748 | 729 |
| 749 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); | 730 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id)); |
| 750 | 731 |
| 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 = | 732 AccountReconcilor* reconcilor = |
| 756 AccountReconcilorFactory::GetForProfile(profile()); | 733 AccountReconcilorFactory::GetForProfile(profile()); |
| 757 ASSERT_TRUE(reconcilor); | 734 ASSERT_TRUE(reconcilor); |
| 758 | 735 |
| 759 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 736 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 760 reconcilor->StartReconcile(); | 737 reconcilor->StartReconcile(); |
| 761 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 738 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 762 | 739 |
| 763 base::RunLoop().RunUntilIdle(); | 740 base::RunLoop().RunUntilIdle(); |
| 764 | 741 |
| 765 // If an unknown account id is sent, it should not upset the state. | 742 // If an unknown account id is sent, it should not upset the state. |
| 766 SimulateAddAccountToCookieCompleted(reconcilor, "bogus_account_id", | 743 SimulateAddAccountToCookieCompleted(reconcilor, "bogus_account_id", |
| 767 GoogleServiceAuthError::AuthErrorNone()); | 744 GoogleServiceAuthError::AuthErrorNone()); |
| 768 ASSERT_TRUE(reconcilor->is_reconcile_started_); | 745 ASSERT_TRUE(reconcilor->is_reconcile_started_); |
| 769 | 746 |
| 770 SimulateAddAccountToCookieCompleted(reconcilor, account_id, | 747 SimulateAddAccountToCookieCompleted(reconcilor, account_id, |
| 771 GoogleServiceAuthError::AuthErrorNone()); | 748 GoogleServiceAuthError::AuthErrorNone()); |
| 772 ASSERT_FALSE(reconcilor->is_reconcile_started_); | 749 ASSERT_FALSE(reconcilor->is_reconcile_started_); |
| 773 } | 750 } |
| 774 | 751 |
| 775 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, | 752 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, |
| 776 AccountReconcilorTest, | 753 AccountReconcilorTest, |
| 777 testing::Bool()); | 754 testing::Bool()); |
| OLD | NEW |