Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Side by Side Diff: chrome/browser/signin/account_reconcilor_unittest.cc

Issue 964563002: Replace SetAuthenticatedUsername with SetAuthenticatedAccountId. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@priv
Patch Set: rebased Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/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/gaia_cookie_manager_service_factory.h" 19 #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h"
19 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
20 #include "chrome/browser/signin/signin_manager_factory.h" 21 #include "chrome/browser/signin/signin_manager_factory.h"
21 #include "chrome/browser/signin/test_signin_client_builder.h" 22 #include "chrome/browser/signin/test_signin_client_builder.h"
22 #include "chrome/test/base/testing_browser_process.h" 23 #include "chrome/test/base/testing_browser_process.h"
23 #include "chrome/test/base/testing_profile.h" 24 #include "chrome/test/base/testing_profile.h"
24 #include "chrome/test/base/testing_profile_manager.h" 25 #include "chrome/test/base/testing_profile_manager.h"
25 #include "components/signin/core/browser/account_reconcilor.h" 26 #include "components/signin/core/browser/account_reconcilor.h"
27 #include "components/signin/core/browser/account_tracker_service.h"
26 #include "components/signin/core/browser/profile_oauth2_token_service.h" 28 #include "components/signin/core/browser/profile_oauth2_token_service.h"
27 #include "components/signin/core/browser/signin_manager.h" 29 #include "components/signin/core/browser/signin_manager.h"
28 #include "components/signin/core/browser/signin_metrics.h" 30 #include "components/signin/core/browser/signin_metrics.h"
29 #include "components/signin/core/browser/test_signin_client.h" 31 #include "components/signin/core/browser/test_signin_client.h"
30 #include "components/signin/core/common/profile_management_switches.h" 32 #include "components/signin/core/common/profile_management_switches.h"
31 #include "components/signin/core/common/signin_switches.h" 33 #include "components/signin/core/common/signin_switches.h"
32 #include "content/public/test/test_browser_thread_bundle.h" 34 #include "content/public/test/test_browser_thread_bundle.h"
33 #include "google_apis/gaia/gaia_constants.h" 35 #include "google_apis/gaia/gaia_constants.h"
34 #include "google_apis/gaia/gaia_urls.h" 36 #include "google_apis/gaia/gaia_urls.h"
35 #include "net/url_request/test_url_fetcher_factory.h" 37 #include "net/url_request/test_url_fetcher_factory.h"
36 #include "testing/gmock/include/gmock/gmock.h" 38 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
38 40
39 namespace { 41 namespace {
40 42
41 const char kTestEmail[] = "user@gmail.com";
42
43 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> { 43 class MockAccountReconcilor : public testing::StrictMock<AccountReconcilor> {
44 public: 44 public:
45 static KeyedService* Build(content::BrowserContext* context); 45 static KeyedService* Build(content::BrowserContext* context);
46 46
47 MockAccountReconcilor(ProfileOAuth2TokenService* token_service, 47 MockAccountReconcilor(ProfileOAuth2TokenService* token_service,
48 SigninManagerBase* signin_manager, 48 SigninManagerBase* signin_manager,
49 SigninClient* client, 49 SigninClient* client,
50 GaiaCookieManagerService* cookie_manager_service); 50 GaiaCookieManagerService* cookie_manager_service);
51 ~MockAccountReconcilor() override {} 51 ~MockAccountReconcilor() override {}
52 52
(...skipping 27 matching lines...) Expand all
80 80
81 class AccountReconcilorTest : public ::testing::TestWithParam<bool> { 81 class AccountReconcilorTest : public ::testing::TestWithParam<bool> {
82 public: 82 public:
83 AccountReconcilorTest(); 83 AccountReconcilorTest();
84 void SetUp() override; 84 void SetUp() override;
85 85
86 TestingProfile* profile() { return profile_; } 86 TestingProfile* profile() { return profile_; }
87 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; } 87 FakeSigninManagerForTesting* signin_manager() { return signin_manager_; }
88 FakeProfileOAuth2TokenService* token_service() { return token_service_; } 88 FakeProfileOAuth2TokenService* token_service() { return token_service_; }
89 TestSigninClient* test_signin_client() { return test_signin_client_; } 89 TestSigninClient* test_signin_client() { return test_signin_client_; }
90 AccountTrackerService* account_tracker() { return account_tracker_; }
90 base::HistogramTester* histogram_tester() { return &histogram_tester_; } 91 base::HistogramTester* histogram_tester() { return &histogram_tester_; }
91 92
92 void SetFakeResponse(const std::string& url, 93 void SetFakeResponse(const std::string& url,
93 const std::string& data, 94 const std::string& data,
94 net::HttpStatusCode code, 95 net::HttpStatusCode code,
95 net::URLRequestStatus::Status status) { 96 net::URLRequestStatus::Status status) {
96 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status); 97 url_fetcher_factory_.SetFakeResponse(GURL(url), data, code, status);
97 } 98 }
98 99
99 MockAccountReconcilor* GetMockReconcilor(); 100 MockAccountReconcilor* GetMockReconcilor();
100 101
102 std::string ConnectProfileToAccount(const std::string& gaia_id,
103 const std::string& username);
104
105 std::string PickAccountIdForAccount(const std::string& gaia_id,
106 const std::string& username);
107
101 void SimulateAddAccountToCookieCompleted( 108 void SimulateAddAccountToCookieCompleted(
102 GaiaCookieManagerService::Observer* observer, 109 GaiaCookieManagerService::Observer* observer,
103 const std::string& account_id, 110 const std::string& account_id,
104 const GoogleServiceAuthError& error); 111 const GoogleServiceAuthError& error);
105 112
106 void SimulateCookieContentSettingsChanged( 113 void SimulateCookieContentSettingsChanged(
107 content_settings::Observer* observer, 114 content_settings::Observer* observer,
108 const ContentSettingsPattern& primary_pattern); 115 const ContentSettingsPattern& primary_pattern);
109 116
110 GURL list_accounts_url() { return list_accounts_url_; } 117 GURL list_accounts_url() { return list_accounts_url_; }
111 GURL get_check_connection_info_url() { 118 GURL get_check_connection_info_url() {
112 return get_check_connection_info_url_; 119 return get_check_connection_info_url_;
113 } 120 }
114 121
115 private: 122 private:
116 content::TestBrowserThreadBundle bundle_; 123 content::TestBrowserThreadBundle bundle_;
117 TestingProfile* profile_; 124 TestingProfile* profile_;
118 FakeSigninManagerForTesting* signin_manager_; 125 FakeSigninManagerForTesting* signin_manager_;
119 FakeProfileOAuth2TokenService* token_service_; 126 FakeProfileOAuth2TokenService* token_service_;
120 TestSigninClient* test_signin_client_; 127 TestSigninClient* test_signin_client_;
128 AccountTrackerService* account_tracker_;
121 MockAccountReconcilor* mock_reconcilor_; 129 MockAccountReconcilor* mock_reconcilor_;
122 net::FakeURLFetcherFactory url_fetcher_factory_; 130 net::FakeURLFetcherFactory url_fetcher_factory_;
123 scoped_ptr<TestingProfileManager> testing_profile_manager_; 131 scoped_ptr<TestingProfileManager> testing_profile_manager_;
124 base::HistogramTester histogram_tester_; 132 base::HistogramTester histogram_tester_;
125 GURL list_accounts_url_; 133 GURL list_accounts_url_;
126 GURL get_check_connection_info_url_; 134 GURL get_check_connection_info_url_;
127 135
128 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest); 136 DISALLOW_COPY_AND_ASSIGN(AccountReconcilorTest);
129 }; 137 };
130 138
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(), 173 factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(),
166 FakeSigninManagerBase::Build)); 174 FakeSigninManagerBase::Build));
167 factories.push_back(std::make_pair(AccountReconcilorFactory::GetInstance(), 175 factories.push_back(std::make_pair(AccountReconcilorFactory::GetInstance(),
168 MockAccountReconcilor::Build)); 176 MockAccountReconcilor::Build));
169 177
170 profile_ = testing_profile_manager_.get()->CreateTestingProfile("name", 178 profile_ = testing_profile_manager_.get()->CreateTestingProfile("name",
171 scoped_ptr<PrefServiceSyncable>(), 179 scoped_ptr<PrefServiceSyncable>(),
172 base::UTF8ToUTF16("name"), 0, std::string(), 180 base::UTF8ToUTF16("name"), 0, std::string(),
173 factories); 181 factories);
174 182
175 signin_manager_ = 183 test_signin_client_ =
176 static_cast<FakeSigninManagerForTesting*>( 184 static_cast<TestSigninClient*>(
177 SigninManagerFactory::GetForProfile(profile())); 185 ChromeSigninClientFactory::GetForProfile(profile()));
178 186
179 token_service_ = 187 token_service_ =
180 static_cast<FakeProfileOAuth2TokenService*>( 188 static_cast<FakeProfileOAuth2TokenService*>(
181 ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); 189 ProfileOAuth2TokenServiceFactory::GetForProfile(profile()));
182 190
183 test_signin_client_ = 191 account_tracker_ =
184 static_cast<TestSigninClient*>( 192 AccountTrackerServiceFactory::GetForProfile(profile());
185 ChromeSigninClientFactory::GetForProfile(profile())); 193
194 signin_manager_ =
195 static_cast<FakeSigninManagerForTesting*>(
196 SigninManagerFactory::GetForProfile(profile()));
186 } 197 }
187 198
188 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() { 199 MockAccountReconcilor* AccountReconcilorTest::GetMockReconcilor() {
189 if (!mock_reconcilor_) { 200 if (!mock_reconcilor_) {
190 mock_reconcilor_ = 201 mock_reconcilor_ =
191 static_cast<MockAccountReconcilor*>( 202 static_cast<MockAccountReconcilor*>(
192 AccountReconcilorFactory::GetForProfile(profile())); 203 AccountReconcilorFactory::GetForProfile(profile()));
193 } 204 }
194 205
195 return mock_reconcilor_; 206 return mock_reconcilor_;
196 } 207 }
197 208
209 std::string AccountReconcilorTest::ConnectProfileToAccount(
210 const std::string& gaia_id,
211 const std::string& username) {
212 const std::string account_id = PickAccountIdForAccount(gaia_id, username);
213 #if !defined(OS_CHROMEOS)
214 signin_manager()->set_password("password");
215 #endif
216 signin_manager()->SetAuthenticatedAccountInfo(gaia_id, username);
217 token_service()->UpdateCredentials(account_id, "refresh_token");
218 return account_id;
219 }
220
221 std::string AccountReconcilorTest::PickAccountIdForAccount(
222 const std::string& gaia_id,
223 const std::string& username) {
224 return account_tracker()->PickAccountIdForAccount(gaia_id, username);
225 }
226
198 void AccountReconcilorTest::SimulateAddAccountToCookieCompleted( 227 void AccountReconcilorTest::SimulateAddAccountToCookieCompleted(
199 GaiaCookieManagerService::Observer* observer, 228 GaiaCookieManagerService::Observer* observer,
200 const std::string& account_id, 229 const std::string& account_id,
201 const GoogleServiceAuthError& error) { 230 const GoogleServiceAuthError& error) {
202 observer->OnAddAccountToCookieCompleted(account_id, error); 231 observer->OnAddAccountToCookieCompleted(account_id, error);
203 } 232 }
204 233
205 void AccountReconcilorTest::SimulateCookieContentSettingsChanged( 234 void AccountReconcilorTest::SimulateCookieContentSettingsChanged(
206 content_settings::Observer* observer, 235 content_settings::Observer* observer,
207 const ContentSettingsPattern& primary_pattern) { 236 const ContentSettingsPattern& primary_pattern) {
(...skipping 15 matching lines...) Expand all
223 // This method requires the use of the |TestSigninClient| to be created from the 252 // This method requires the use of the |TestSigninClient| to be created from the
224 // |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded| 253 // |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded|
225 // method with an empty implementation. On MacOS, the normal implementation 254 // method with an empty implementation. On MacOS, the normal implementation
226 // causes the try_bots to time out. 255 // causes the try_bots to time out.
227 TEST_F(AccountReconcilorTest, SigninManagerRegistration) { 256 TEST_F(AccountReconcilorTest, SigninManagerRegistration) {
228 AccountReconcilor* reconcilor = 257 AccountReconcilor* reconcilor =
229 AccountReconcilorFactory::GetForProfile(profile()); 258 AccountReconcilorFactory::GetForProfile(profile());
230 ASSERT_TRUE(reconcilor); 259 ASSERT_TRUE(reconcilor);
231 ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService()); 260 ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService());
232 261
233 signin_manager()->set_password("password"); 262 account_tracker()->SeedAccountInfo("12345", "user@gmail.com");
234 signin_manager()->OnExternalSigninCompleted(kTestEmail); 263 signin_manager()->SignIn("12345", "user@gmail.com", "password");
235 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 264 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService());
236 265
237 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); 266 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction());
238 267
239 signin_manager()->SignOut(signin_metrics::SIGNOUT_TEST); 268 signin_manager()->SignOut(signin_metrics::SIGNOUT_TEST);
240 ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService()); 269 ASSERT_FALSE(reconcilor->IsRegisteredWithTokenService());
241 } 270 }
242 271
243 // This method requires the use of the |TestSigninClient| to be created from the 272 // This method requires the use of the |TestSigninClient| to be created from the
244 // |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded| 273 // |ChromeSigninClientFactory| because it overrides the |GoogleSigninSucceeded|
245 // method with an empty implementation. On MacOS, the normal implementation 274 // method with an empty implementation. On MacOS, the normal implementation
246 // causes the try_bots to time out. 275 // causes the try_bots to time out.
247 TEST_F(AccountReconcilorTest, Reauth) { 276 TEST_F(AccountReconcilorTest, Reauth) {
248 signin_manager()->SetAuthenticatedUsername(kTestEmail); 277 const std::string email = "user@gmail.com";
249 signin_manager()->set_password("password"); 278 const std::string account_id =
279 ConnectProfileToAccount("12345", email);
250 280
251 AccountReconcilor* reconcilor = 281 AccountReconcilor* reconcilor =
252 AccountReconcilorFactory::GetForProfile(profile()); 282 AccountReconcilorFactory::GetForProfile(profile());
253 ASSERT_TRUE(reconcilor); 283 ASSERT_TRUE(reconcilor);
254 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 284 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService());
255 285
256 // Simulate reauth. The state of the reconcilor should not change. 286 // Simulate reauth. The state of the reconcilor should not change.
257 signin_manager()->OnExternalSigninCompleted(kTestEmail); 287 signin_manager()->OnExternalSigninCompleted(email);
258 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 288 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService());
259 } 289 }
260 290
261 #endif // !defined(OS_CHROMEOS) 291 #endif // !defined(OS_CHROMEOS)
262 292
263 TEST_F(AccountReconcilorTest, ProfileAlreadyConnected) { 293 TEST_F(AccountReconcilorTest, ProfileAlreadyConnected) {
264 signin_manager()->SetAuthenticatedUsername(kTestEmail); 294 ConnectProfileToAccount("12345", "user@gmail.com");
265 295
266 AccountReconcilor* reconcilor = 296 AccountReconcilor* reconcilor =
267 AccountReconcilorFactory::GetForProfile(profile()); 297 AccountReconcilorFactory::GetForProfile(profile());
268 ASSERT_TRUE(reconcilor); 298 ASSERT_TRUE(reconcilor);
269 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService()); 299 ASSERT_TRUE(reconcilor->IsRegisteredWithTokenService());
270 } 300 }
271 301
272 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) { 302 TEST_F(AccountReconcilorTest, GetAccountsFromCookieSuccess) {
273 signin_manager()->SetAuthenticatedUsername(kTestEmail); 303 const std::string account_id =
274 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 304 ConnectProfileToAccount("12345", "user@gmail.com");
275 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(kTestEmail)); 305 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id));
306
276 AccountReconcilor* reconcilor = 307 AccountReconcilor* reconcilor =
277 AccountReconcilorFactory::GetForProfile(profile()); 308 AccountReconcilorFactory::GetForProfile(profile());
278 ASSERT_TRUE(reconcilor); 309 ASSERT_TRUE(reconcilor);
279 310
280 SetFakeResponse(list_accounts_url().spec(), 311 SetFakeResponse(list_accounts_url().spec(),
281 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", 312 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]",
282 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 313 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
283 314
284 reconcilor->StartReconcile(); 315 reconcilor->StartReconcile();
285 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 316 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
286 317
287 base::RunLoop().RunUntilIdle(); 318 base::RunLoop().RunUntilIdle();
288 ASSERT_TRUE(reconcilor->AreGaiaAccountsSet()); 319 ASSERT_TRUE(reconcilor->AreGaiaAccountsSet());
289 const std::vector<std::pair<std::string, bool> >& accounts = 320 const std::vector<std::pair<std::string, bool> >& accounts =
290 reconcilor->GetGaiaAccountsForTesting(); 321 reconcilor->GetGaiaAccountsForTesting();
291 ASSERT_EQ(1u, accounts.size()); 322 ASSERT_EQ(1u, accounts.size());
292 ASSERT_EQ("user@gmail.com", accounts[0].first); 323 ASSERT_EQ(account_id, accounts[0].first);
293 } 324 }
294 325
295 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) { 326 TEST_F(AccountReconcilorTest, GetAccountsFromCookieFailure) {
296 signin_manager()->SetAuthenticatedUsername(kTestEmail); 327 ConnectProfileToAccount("12345", "user@gmail.com");
297 token_service()->UpdateCredentials(kTestEmail, "refresh_token");
298 AccountReconcilor* reconcilor = 328 AccountReconcilor* reconcilor =
299 AccountReconcilorFactory::GetForProfile(profile()); 329 AccountReconcilorFactory::GetForProfile(profile());
300 ASSERT_TRUE(reconcilor); 330 ASSERT_TRUE(reconcilor);
301 331
302 SetFakeResponse(list_accounts_url().spec(), "", 332 SetFakeResponse(list_accounts_url().spec(), "",
303 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS); 333 net::HTTP_NOT_FOUND, net::URLRequestStatus::SUCCESS);
304 334
305 reconcilor->StartReconcile(); 335 reconcilor->StartReconcile();
306 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 336 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
307 337
308 base::RunLoop().RunUntilIdle(); 338 base::RunLoop().RunUntilIdle();
309 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 339 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
310 } 340 }
311 341
312 TEST_P(AccountReconcilorTest, StartReconcileNoop) { 342 TEST_P(AccountReconcilorTest, StartReconcileNoop) {
313 signin_manager()->SetAuthenticatedUsername(kTestEmail); 343 const std::string account_id =
314 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 344 ConnectProfileToAccount("12345", "user@gmail.com");
315 345
316 AccountReconcilor* reconcilor = 346 AccountReconcilor* reconcilor =
317 AccountReconcilorFactory::GetForProfile(profile()); 347 AccountReconcilorFactory::GetForProfile(profile());
318 ASSERT_TRUE(reconcilor); 348 ASSERT_TRUE(reconcilor);
319 349
320 SetFakeResponse(list_accounts_url().spec(), 350 SetFakeResponse(list_accounts_url().spec(),
321 "[\"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]]]",
322 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 352 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
323 353
324 reconcilor->StartReconcile(); 354 reconcilor->StartReconcile();
325 ASSERT_TRUE(reconcilor->is_reconcile_started_); 355 ASSERT_TRUE(reconcilor->is_reconcile_started_);
326 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 356 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
327 357
328 base::RunLoop().RunUntilIdle(); 358 base::RunLoop().RunUntilIdle();
329 ASSERT_FALSE(reconcilor->is_reconcile_started_); 359 ASSERT_FALSE(reconcilor->is_reconcile_started_);
330 360
331 histogram_tester()->ExpectTotalCount( 361 histogram_tester()->ExpectTotalCount(
332 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); 362 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1);
333 histogram_tester()->ExpectUniqueSample( 363 histogram_tester()->ExpectUniqueSample(
334 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 364 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
335 signin_metrics::ACCOUNTS_SAME, 365 signin_metrics::ACCOUNTS_SAME,
336 1); 366 1);
337 } 367 }
338 368
339 TEST_P(AccountReconcilorTest, StartReconcileCookiesDisabled) { 369 TEST_P(AccountReconcilorTest, StartReconcileCookiesDisabled) {
340 signin_manager()->SetAuthenticatedUsername(kTestEmail); 370 const std::string account_id =
341 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 371 ConnectProfileToAccount("12345", "user@gmail.com");
372 token_service()->UpdateCredentials(account_id, "refresh_token");
342 test_signin_client()->set_are_signin_cookies_allowed(false); 373 test_signin_client()->set_are_signin_cookies_allowed(false);
343 374
344 AccountReconcilor* reconcilor = 375 AccountReconcilor* reconcilor =
345 AccountReconcilorFactory::GetForProfile(profile()); 376 AccountReconcilorFactory::GetForProfile(profile());
346 ASSERT_TRUE(reconcilor); 377 ASSERT_TRUE(reconcilor);
347 378
348 reconcilor->StartReconcile(); 379 reconcilor->StartReconcile();
349 ASSERT_FALSE(reconcilor->is_reconcile_started_); 380 ASSERT_FALSE(reconcilor->is_reconcile_started_);
350 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 381 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
351 382
352 base::RunLoop().RunUntilIdle(); 383 base::RunLoop().RunUntilIdle();
353 ASSERT_FALSE(reconcilor->is_reconcile_started_); 384 ASSERT_FALSE(reconcilor->is_reconcile_started_);
354 } 385 }
355 386
356 TEST_P(AccountReconcilorTest, StartReconcileContentSettings) { 387 TEST_P(AccountReconcilorTest, StartReconcileContentSettings) {
357 signin_manager()->SetAuthenticatedUsername(kTestEmail); 388 const std::string account_id =
358 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 389 ConnectProfileToAccount("12345", "user@gmail.com");
390 token_service()->UpdateCredentials(account_id, "refresh_token");
359 391
360 AccountReconcilor* reconcilor = 392 AccountReconcilor* reconcilor =
361 AccountReconcilorFactory::GetForProfile(profile()); 393 AccountReconcilorFactory::GetForProfile(profile());
362 ASSERT_TRUE(reconcilor); 394 ASSERT_TRUE(reconcilor);
363 395
364 test_signin_client()->set_are_signin_cookies_allowed(false); 396 test_signin_client()->set_are_signin_cookies_allowed(false);
365 SimulateCookieContentSettingsChanged(reconcilor, 397 SimulateCookieContentSettingsChanged(reconcilor,
366 ContentSettingsPattern::Wildcard()); 398 ContentSettingsPattern::Wildcard());
367 ASSERT_FALSE(reconcilor->is_reconcile_started_); 399 ASSERT_FALSE(reconcilor->is_reconcile_started_);
368 400
369 test_signin_client()->set_are_signin_cookies_allowed(true); 401 test_signin_client()->set_are_signin_cookies_allowed(true);
370 SimulateCookieContentSettingsChanged(reconcilor, 402 SimulateCookieContentSettingsChanged(reconcilor,
371 ContentSettingsPattern::Wildcard()); 403 ContentSettingsPattern::Wildcard());
372 ASSERT_TRUE(reconcilor->is_reconcile_started_); 404 ASSERT_TRUE(reconcilor->is_reconcile_started_);
373 } 405 }
374 406
375 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsGaiaUrl) { 407 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsGaiaUrl) {
376 signin_manager()->SetAuthenticatedUsername(kTestEmail); 408 const std::string account_id =
377 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 409 ConnectProfileToAccount("12345", "user@gmail.com");
410 token_service()->UpdateCredentials(account_id, "refresh_token");
378 411
379 AccountReconcilor* reconcilor = 412 AccountReconcilor* reconcilor =
380 AccountReconcilorFactory::GetForProfile(profile()); 413 AccountReconcilorFactory::GetForProfile(profile());
381 ASSERT_TRUE(reconcilor); 414 ASSERT_TRUE(reconcilor);
382 415
383 SimulateCookieContentSettingsChanged( 416 SimulateCookieContentSettingsChanged(
384 reconcilor, 417 reconcilor,
385 ContentSettingsPattern::FromURL(GaiaUrls::GetInstance()->gaia_url())); 418 ContentSettingsPattern::FromURL(GaiaUrls::GetInstance()->gaia_url()));
386 ASSERT_TRUE(reconcilor->is_reconcile_started_); 419 ASSERT_TRUE(reconcilor->is_reconcile_started_);
387 } 420 }
388 421
389 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsNonGaiaUrl) { 422 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsNonGaiaUrl) {
390 signin_manager()->SetAuthenticatedUsername(kTestEmail); 423 const std::string account_id =
391 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 424 ConnectProfileToAccount("12345", "user@gmail.com");
425 token_service()->UpdateCredentials(account_id, "refresh_token");
392 426
393 AccountReconcilor* reconcilor = 427 AccountReconcilor* reconcilor =
394 AccountReconcilorFactory::GetForProfile(profile()); 428 AccountReconcilorFactory::GetForProfile(profile());
395 ASSERT_TRUE(reconcilor); 429 ASSERT_TRUE(reconcilor);
396 430
397 SimulateCookieContentSettingsChanged( 431 SimulateCookieContentSettingsChanged(
398 reconcilor, 432 reconcilor,
399 ContentSettingsPattern::FromURL(GURL("http://www.example.com"))); 433 ContentSettingsPattern::FromURL(GURL("http://www.example.com")));
400 ASSERT_FALSE(reconcilor->is_reconcile_started_); 434 ASSERT_FALSE(reconcilor->is_reconcile_started_);
401 } 435 }
402 436
403 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsInvalidPattern) { 437 TEST_P(AccountReconcilorTest, StartReconcileContentSettingsInvalidPattern) {
404 signin_manager()->SetAuthenticatedUsername(kTestEmail); 438 const std::string account_id =
405 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 439 ConnectProfileToAccount("12345", "user@gmail.com");
440 token_service()->UpdateCredentials(account_id, "refresh_token");
406 441
407 AccountReconcilor* reconcilor = 442 AccountReconcilor* reconcilor =
408 AccountReconcilorFactory::GetForProfile(profile()); 443 AccountReconcilorFactory::GetForProfile(profile());
409 ASSERT_TRUE(reconcilor); 444 ASSERT_TRUE(reconcilor);
410 445
411 scoped_ptr<ContentSettingsPattern::BuilderInterface> 446 scoped_ptr<ContentSettingsPattern::BuilderInterface>
412 builder(ContentSettingsPattern::CreateBuilder(false)); 447 builder(ContentSettingsPattern::CreateBuilder(false));
413 builder->Invalid(); 448 builder->Invalid();
414 449
415 SimulateCookieContentSettingsChanged(reconcilor, builder->Build()); 450 SimulateCookieContentSettingsChanged(reconcilor, builder->Build());
416 ASSERT_TRUE(reconcilor->is_reconcile_started_); 451 ASSERT_TRUE(reconcilor->is_reconcile_started_);
417 } 452 }
418 453
419 // This is test is needed until chrome changes to use gaia obfuscated id. 454 // This test is needed until chrome changes to use gaia obfuscated id.
420 // The signin manager and token service use the gaia "email" property, which 455 // The signin manager and token service use the gaia "email" property, which
421 // preserves dots in usernames and preserves case. gaia::ParseListAccountsData() 456 // preserves dots in usernames and preserves case. gaia::ParseListAccountsData()
422 // however uses gaia "displayEmail" which does not preserve case, and then 457 // however uses gaia "displayEmail" which does not preserve case, and then
423 // passes the string through gaia::CanonicalizeEmail() which removes dots. This 458 // passes the string through gaia::CanonicalizeEmail() which removes dots. This
424 // tests makes sure that an email like "Dot.S@hmail.com", as seen by the 459 // tests makes sure that an email like "Dot.S@hmail.com", as seen by the
425 // token service, will be considered the same as "dots@gmail.com" as returned 460 // token service, will be considered the same as "dots@gmail.com" as returned
426 // by gaia::ParseListAccountsData(). 461 // by gaia::ParseListAccountsData().
427 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) { 462 TEST_P(AccountReconcilorTest, StartReconcileNoopWithDots) {
428 signin_manager()->SetAuthenticatedUsername("Dot.S@gmail.com"); 463 if (account_tracker()->GetMigrationState() !=
429 token_service()->UpdateCredentials("Dot.S@gmail.com", "refresh_token"); 464 AccountTrackerService::MIGRATION_NOT_STARTED) {
465 return;
466 }
430 467
468 const std::string account_id =
469 ConnectProfileToAccount("12345", "Dot.S@gmail.com");
431 AccountReconcilor* reconcilor = 470 AccountReconcilor* reconcilor =
432 AccountReconcilorFactory::GetForProfile(profile()); 471 AccountReconcilorFactory::GetForProfile(profile());
433 ASSERT_TRUE(reconcilor); 472 ASSERT_TRUE(reconcilor);
434 473
435 SetFakeResponse(list_accounts_url().spec(), 474 SetFakeResponse(list_accounts_url().spec(),
436 "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 475 "[\"f\", [[\"b\", 0, \"n\", \"dot.s@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
437 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 476 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
438 477
439 reconcilor->StartReconcile(); 478 reconcilor->StartReconcile();
440 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 479 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
441 480
442 base::RunLoop().RunUntilIdle(); 481 base::RunLoop().RunUntilIdle();
443 ASSERT_FALSE(reconcilor->is_reconcile_started_); 482 ASSERT_FALSE(reconcilor->is_reconcile_started_);
444 483
445 histogram_tester()->ExpectUniqueSample( 484 histogram_tester()->ExpectUniqueSample(
446 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 485 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
447 signin_metrics::ACCOUNTS_SAME, 486 signin_metrics::ACCOUNTS_SAME,
448 1); 487 1);
449 } 488 }
450 489
451 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) { 490 TEST_P(AccountReconcilorTest, StartReconcileNoopMultiple) {
452 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 491 const std::string account_id =
453 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 492 ConnectProfileToAccount("12345", "user@gmail.com");
454 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 493 const std::string account_id2 =
494 PickAccountIdForAccount("67890", "other@gmail.com");
495 token_service()->UpdateCredentials(account_id2, "refresh_token");
455 496
456 AccountReconcilor* reconcilor = 497 AccountReconcilor* reconcilor =
457 AccountReconcilorFactory::GetForProfile(profile()); 498 AccountReconcilorFactory::GetForProfile(profile());
458 ASSERT_TRUE(reconcilor); 499 ASSERT_TRUE(reconcilor);
459 500
460 SetFakeResponse(list_accounts_url().spec(), 501 SetFakeResponse(list_accounts_url().spec(),
461 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 502 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], "
462 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 503 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
463 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 504 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
464 505
465 reconcilor->StartReconcile(); 506 reconcilor->StartReconcile();
466 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet()); 507 ASSERT_FALSE(reconcilor->AreGaiaAccountsSet());
467 base::RunLoop().RunUntilIdle(); 508 base::RunLoop().RunUntilIdle();
468 ASSERT_FALSE(reconcilor->is_reconcile_started_); 509 ASSERT_FALSE(reconcilor->is_reconcile_started_);
469 510
470 histogram_tester()->ExpectTotalCount( 511 histogram_tester()->ExpectTotalCount(
471 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1); 512 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 1);
472 histogram_tester()->ExpectUniqueSample( 513 histogram_tester()->ExpectUniqueSample(
473 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 514 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
474 signin_metrics::ACCOUNTS_SAME, 515 signin_metrics::ACCOUNTS_SAME,
475 1); 516 1);
476 } 517 }
477 518
478 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) { 519 TEST_P(AccountReconcilorTest, StartReconcileAddToCookie) {
479 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 520 const std::string account_id =
480 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 521 ConnectProfileToAccount("12345", "user@gmail.com");
481 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 522 token_service()->UpdateCredentials(account_id, "refresh_token");
482 523
483 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 524 const std::string account_id2 =
525 PickAccountIdForAccount("67890", "other@gmail.com");
526 token_service()->UpdateCredentials(account_id2, "refresh_token");
527
528 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2));
484 529
485 SetFakeResponse(list_accounts_url().spec(), 530 SetFakeResponse(list_accounts_url().spec(),
486 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 531 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
487 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 532 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
488 533
489 AccountReconcilor* reconcilor = GetMockReconcilor(); 534 AccountReconcilor* reconcilor = GetMockReconcilor();
490 reconcilor->StartReconcile(); 535 reconcilor->StartReconcile();
491 536
492 base::RunLoop().RunUntilIdle(); 537 base::RunLoop().RunUntilIdle();
493 ASSERT_TRUE(reconcilor->is_reconcile_started_); 538 ASSERT_TRUE(reconcilor->is_reconcile_started_);
494 SimulateAddAccountToCookieCompleted(reconcilor, "other@gmail.com", 539 SimulateAddAccountToCookieCompleted(reconcilor, account_id2,
495 GoogleServiceAuthError::AuthErrorNone()); 540 GoogleServiceAuthError::AuthErrorNone());
496 ASSERT_FALSE(reconcilor->is_reconcile_started_); 541 ASSERT_FALSE(reconcilor->is_reconcile_started_);
497 542
498 histogram_tester()->ExpectUniqueSample( 543 histogram_tester()->ExpectUniqueSample(
499 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 544 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
500 signin_metrics::ACCOUNTS_SAME, 545 signin_metrics::ACCOUNTS_SAME,
501 1); 546 1);
502 histogram_tester()->ExpectUniqueSample( 547 histogram_tester()->ExpectUniqueSample(
503 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 548 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1);
504 histogram_tester()->ExpectUniqueSample( 549 histogram_tester()->ExpectUniqueSample(
505 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); 550 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1);
506 } 551 }
507 552
508 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) { 553 TEST_P(AccountReconcilorTest, StartReconcileRemoveFromCookie) {
509 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 554 const std::string account_id =
510 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 555 ConnectProfileToAccount("12345", "user@gmail.com");
556 token_service()->UpdateCredentials(account_id, "refresh_token");
511 557
512 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); 558 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction());
513 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 559 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id));
514 560
515 SetFakeResponse(list_accounts_url().spec(), 561 SetFakeResponse(list_accounts_url().spec(),
516 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 562 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], "
517 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 563 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
518 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 564 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
519 565
520 AccountReconcilor* reconcilor = GetMockReconcilor(); 566 AccountReconcilor* reconcilor = GetMockReconcilor();
521 reconcilor->StartReconcile(); 567 reconcilor->StartReconcile();
522 ASSERT_TRUE(reconcilor->is_reconcile_started_); 568 ASSERT_TRUE(reconcilor->is_reconcile_started_);
523 569
524 base::RunLoop().RunUntilIdle(); 570 base::RunLoop().RunUntilIdle();
525 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", 571 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com",
526 GoogleServiceAuthError::AuthErrorNone()); 572 GoogleServiceAuthError::AuthErrorNone());
527 ASSERT_FALSE(reconcilor->is_reconcile_started_); 573 ASSERT_FALSE(reconcilor->is_reconcile_started_);
528 574
529 histogram_tester()->ExpectUniqueSample( 575 histogram_tester()->ExpectUniqueSample(
530 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 576 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
531 signin_metrics::ACCOUNTS_SAME, 577 signin_metrics::ACCOUNTS_SAME,
532 1); 578 1);
533 histogram_tester()->ExpectUniqueSample( 579 histogram_tester()->ExpectUniqueSample(
534 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); 580 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1);
535 histogram_tester()->ExpectUniqueSample( 581 histogram_tester()->ExpectUniqueSample(
536 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 1, 1); 582 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 1, 1);
537 } 583 }
538 584
539 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) { 585 TEST_P(AccountReconcilorTest, StartReconcileAddToCookieTwice) {
540 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 586 const std::string account_id =
541 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 587 ConnectProfileToAccount("12345", "user@gmail.com");
542 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 588 const std::string account_id2 =
589 PickAccountIdForAccount("67890", "other@gmail.com");
590 const std::string account_id3 =
591 PickAccountIdForAccount("34567", "third@gmail.com");
543 592
544 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 593 token_service()->UpdateCredentials(account_id2, "refresh_token");
545 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("third@gmail.com")); 594
595 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2));
596 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id3));
546 597
547 SetFakeResponse( 598 SetFakeResponse(
548 list_accounts_url().spec(), 599 list_accounts_url().spec(),
549 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 600 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
550 net::HTTP_OK, 601 net::HTTP_OK,
551 net::URLRequestStatus::SUCCESS); 602 net::URLRequestStatus::SUCCESS);
552 603
553 AccountReconcilor* reconcilor = GetMockReconcilor(); 604 AccountReconcilor* reconcilor = GetMockReconcilor();
554 reconcilor->StartReconcile(); 605 reconcilor->StartReconcile();
555 606
556 base::RunLoop().RunUntilIdle(); 607 base::RunLoop().RunUntilIdle();
557 ASSERT_TRUE(reconcilor->is_reconcile_started_); 608 ASSERT_TRUE(reconcilor->is_reconcile_started_);
558 SimulateAddAccountToCookieCompleted( 609 SimulateAddAccountToCookieCompleted(
559 reconcilor, "other@gmail.com", GoogleServiceAuthError::AuthErrorNone()); 610 reconcilor, account_id2, GoogleServiceAuthError::AuthErrorNone());
560 ASSERT_FALSE(reconcilor->is_reconcile_started_); 611 ASSERT_FALSE(reconcilor->is_reconcile_started_);
561 612
562 histogram_tester()->ExpectUniqueSample( 613 histogram_tester()->ExpectUniqueSample(
563 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 614 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
564 signin_metrics::ACCOUNTS_SAME, 615 signin_metrics::ACCOUNTS_SAME,
565 1); 616 1);
566 histogram_tester()->ExpectUniqueSample( 617 histogram_tester()->ExpectUniqueSample(
567 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 618 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1);
568 histogram_tester()->ExpectUniqueSample( 619 histogram_tester()->ExpectUniqueSample(
569 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); 620 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1);
570 621
571 // Do another pass after I've added a third account to the token service 622 // Do another pass after I've added a third account to the token service
572 623
573 SetFakeResponse( 624 SetFakeResponse(
574 list_accounts_url().spec(), 625 list_accounts_url().spec(),
575 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 626 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1], "
576 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 627 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
577 net::HTTP_OK, 628 net::HTTP_OK,
578 net::URLRequestStatus::SUCCESS); 629 net::URLRequestStatus::SUCCESS);
579 // This will cause the reconcilor to fire. 630 // This will cause the reconcilor to fire.
580 token_service()->UpdateCredentials("third@gmail.com", "refresh_token"); 631 token_service()->UpdateCredentials(account_id3, "refresh_token");
581
582 base::RunLoop().RunUntilIdle(); 632 base::RunLoop().RunUntilIdle();
583 633
584 ASSERT_TRUE(reconcilor->is_reconcile_started_); 634 ASSERT_TRUE(reconcilor->is_reconcile_started_);
585 SimulateAddAccountToCookieCompleted( 635 SimulateAddAccountToCookieCompleted(
586 reconcilor, "third@gmail.com", GoogleServiceAuthError::AuthErrorNone()); 636 reconcilor, account_id3, GoogleServiceAuthError::AuthErrorNone());
587 ASSERT_FALSE(reconcilor->is_reconcile_started_); 637 ASSERT_FALSE(reconcilor->is_reconcile_started_);
588 638
589 histogram_tester()->ExpectUniqueSample( 639 histogram_tester()->ExpectUniqueSample(
590 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 640 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
591 signin_metrics::ACCOUNTS_SAME, 641 signin_metrics::ACCOUNTS_SAME,
592 1); 642 1);
593 histogram_tester()->ExpectUniqueSample( 643 histogram_tester()->ExpectUniqueSample(
594 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1); 644 "Signin.Reconciler.AddedToCookieJar.FirstRun", 1, 1);
595 histogram_tester()->ExpectUniqueSample( 645 histogram_tester()->ExpectUniqueSample(
596 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); 646 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1);
597 histogram_tester()->ExpectUniqueSample( 647 histogram_tester()->ExpectUniqueSample(
598 "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun", 648 "Signin.Reconciler.DifferentPrimaryAccounts.SubsequentRun",
599 signin_metrics::ACCOUNTS_SAME, 649 signin_metrics::ACCOUNTS_SAME,
600 1); 650 1);
601 histogram_tester()->ExpectUniqueSample( 651 histogram_tester()->ExpectUniqueSample(
602 "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1); 652 "Signin.Reconciler.AddedToCookieJar.SubsequentRun", 1, 1);
603 histogram_tester()->ExpectUniqueSample( 653 histogram_tester()->ExpectUniqueSample(
604 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1); 654 "Signin.Reconciler.RemovedFromCookieJar.SubsequentRun", 0, 1);
605 } 655 }
606 656
607 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) { 657 TEST_P(AccountReconcilorTest, StartReconcileBadPrimary) {
608 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 658 const std::string account_id =
609 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 659 ConnectProfileToAccount("12345", "user@gmail.com");
610 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 660 const std::string account_id2 =
661 PickAccountIdForAccount("67890", "other@gmail.com");
662
663 token_service()->UpdateCredentials(account_id2, "refresh_token");
611 664
612 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction()); 665 EXPECT_CALL(*GetMockReconcilor(), PerformLogoutAllAccountsAction());
613 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 666 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id));
614 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("other@gmail.com")); 667 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id2));
615 668
616 SetFakeResponse(list_accounts_url().spec(), 669 SetFakeResponse(list_accounts_url().spec(),
617 "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], " 670 "[\"f\", [[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1], "
618 "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 671 "[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
619 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 672 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
620 673
621 AccountReconcilor* reconcilor = GetMockReconcilor(); 674 AccountReconcilor* reconcilor = GetMockReconcilor();
622 reconcilor->StartReconcile(); 675 reconcilor->StartReconcile();
623 676
624 base::RunLoop().RunUntilIdle(); 677 base::RunLoop().RunUntilIdle();
625 ASSERT_TRUE(reconcilor->is_reconcile_started_); 678 ASSERT_TRUE(reconcilor->is_reconcile_started_);
626 SimulateAddAccountToCookieCompleted(reconcilor, "other@gmail.com", 679 SimulateAddAccountToCookieCompleted(reconcilor, account_id2,
627 GoogleServiceAuthError::AuthErrorNone()); 680 GoogleServiceAuthError::AuthErrorNone());
628 ASSERT_TRUE(reconcilor->is_reconcile_started_); 681 ASSERT_TRUE(reconcilor->is_reconcile_started_);
629 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", 682 SimulateAddAccountToCookieCompleted(reconcilor, account_id,
630 GoogleServiceAuthError::AuthErrorNone()); 683 GoogleServiceAuthError::AuthErrorNone());
631 ASSERT_FALSE(reconcilor->is_reconcile_started_); 684 ASSERT_FALSE(reconcilor->is_reconcile_started_);
632 685
633 histogram_tester()->ExpectUniqueSample( 686 histogram_tester()->ExpectUniqueSample(
634 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun", 687 "Signin.Reconciler.DifferentPrimaryAccounts.FirstRun",
635 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, 688 signin_metrics::COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT,
636 1); 689 1);
637 histogram_tester()->ExpectUniqueSample( 690 histogram_tester()->ExpectUniqueSample(
638 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1); 691 "Signin.Reconciler.AddedToCookieJar.FirstRun", 0, 1);
639 histogram_tester()->ExpectUniqueSample( 692 histogram_tester()->ExpectUniqueSample(
640 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1); 693 "Signin.Reconciler.RemovedFromCookieJar.FirstRun", 0, 1);
641 } 694 }
642 695
643 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) { 696 TEST_P(AccountReconcilorTest, StartReconcileOnlyOnce) {
644 signin_manager()->SetAuthenticatedUsername(kTestEmail); 697 const std::string account_id =
645 token_service()->UpdateCredentials(kTestEmail, "refresh_token"); 698 ConnectProfileToAccount("12345", "user@gmail.com");
646 699
647 AccountReconcilor* reconcilor = 700 AccountReconcilor* reconcilor =
648 AccountReconcilorFactory::GetForProfile(profile()); 701 AccountReconcilorFactory::GetForProfile(profile());
649 ASSERT_TRUE(reconcilor); 702 ASSERT_TRUE(reconcilor);
650 703
651 SetFakeResponse(list_accounts_url().spec(), 704 SetFakeResponse(list_accounts_url().spec(),
652 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 705 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
653 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 706 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
654 707
655 ASSERT_FALSE(reconcilor->is_reconcile_started_); 708 ASSERT_FALSE(reconcilor->is_reconcile_started_);
656 reconcilor->StartReconcile(); 709 reconcilor->StartReconcile();
657 ASSERT_TRUE(reconcilor->is_reconcile_started_); 710 ASSERT_TRUE(reconcilor->is_reconcile_started_);
658 711
659 base::RunLoop().RunUntilIdle(); 712 base::RunLoop().RunUntilIdle();
660 ASSERT_FALSE(reconcilor->is_reconcile_started_); 713 ASSERT_FALSE(reconcilor->is_reconcile_started_);
661 } 714 }
662 715
663 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) { 716 TEST_P(AccountReconcilorTest, StartReconcileWithSessionInfoExpiredDefault) {
664 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 717 const std::string account_id =
665 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 718 ConnectProfileToAccount("12345", "user@gmail.com");
666 token_service()->UpdateCredentials("other@gmail.com", "refresh_token"); 719 const std::string account_id2 =
720 PickAccountIdForAccount("67890", "other@gmail.com");
721 token_service()->UpdateCredentials(account_id2, "refresh_token");
667 722
668 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 723 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id));
669 724
670 SetFakeResponse(list_accounts_url().spec(), 725 SetFakeResponse(list_accounts_url().spec(),
671 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]," 726 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0],"
672 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]", 727 "[\"b\", 0, \"n\", \"other@gmail.com\", \"p\", 0, 0, 0, 0, 1]]]",
673 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 728 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
674 729
675 AccountReconcilor* reconcilor = 730 AccountReconcilor* reconcilor =
676 AccountReconcilorFactory::GetForProfile(profile()); 731 AccountReconcilorFactory::GetForProfile(profile());
677 ASSERT_TRUE(reconcilor); 732 ASSERT_TRUE(reconcilor);
678 733
679 ASSERT_FALSE(reconcilor->is_reconcile_started_); 734 ASSERT_FALSE(reconcilor->is_reconcile_started_);
680 reconcilor->StartReconcile(); 735 reconcilor->StartReconcile();
681 ASSERT_TRUE(reconcilor->is_reconcile_started_); 736 ASSERT_TRUE(reconcilor->is_reconcile_started_);
682 737
683 base::RunLoop().RunUntilIdle(); 738 base::RunLoop().RunUntilIdle();
684 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", 739 SimulateAddAccountToCookieCompleted(reconcilor, account_id,
685 GoogleServiceAuthError::AuthErrorNone()); 740 GoogleServiceAuthError::AuthErrorNone());
686 ASSERT_FALSE(reconcilor->is_reconcile_started_); 741 ASSERT_FALSE(reconcilor->is_reconcile_started_);
687 } 742 }
688 743
689 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) { 744 TEST_F(AccountReconcilorTest, AddAccountToCookieCompletedWithBogusAccount) {
690 signin_manager()->SetAuthenticatedUsername("user@gmail.com"); 745 const std::string account_id =
691 token_service()->UpdateCredentials("user@gmail.com", "refresh_token"); 746 ConnectProfileToAccount("12345", "user@gmail.com");
692 747
693 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction("user@gmail.com")); 748 EXPECT_CALL(*GetMockReconcilor(), PerformMergeAction(account_id));
694 749
695 SetFakeResponse(list_accounts_url().spec(), 750 SetFakeResponse(list_accounts_url().spec(),
696 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]", 751 "[\"f\", [[\"b\", 0, \"n\", \"user@gmail.com\", \"p\", 0, 0, 0, 0, 0]]]",
697 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 752 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
698 753
699 AccountReconcilor* reconcilor = 754 AccountReconcilor* reconcilor =
700 AccountReconcilorFactory::GetForProfile(profile()); 755 AccountReconcilorFactory::GetForProfile(profile());
701 ASSERT_TRUE(reconcilor); 756 ASSERT_TRUE(reconcilor);
702 757
703 ASSERT_FALSE(reconcilor->is_reconcile_started_); 758 ASSERT_FALSE(reconcilor->is_reconcile_started_);
704 reconcilor->StartReconcile(); 759 reconcilor->StartReconcile();
705 ASSERT_TRUE(reconcilor->is_reconcile_started_); 760 ASSERT_TRUE(reconcilor->is_reconcile_started_);
706 761
707 base::RunLoop().RunUntilIdle(); 762 base::RunLoop().RunUntilIdle();
708 763
709 // If an unknown account id is sent, it should not upset the state. 764 // If an unknown account id is sent, it should not upset the state.
710 SimulateAddAccountToCookieCompleted(reconcilor, "bogus@gmail.com", 765 SimulateAddAccountToCookieCompleted(reconcilor, "bogus_account_id",
711 GoogleServiceAuthError::AuthErrorNone()); 766 GoogleServiceAuthError::AuthErrorNone());
712 ASSERT_TRUE(reconcilor->is_reconcile_started_); 767 ASSERT_TRUE(reconcilor->is_reconcile_started_);
713 768
714 SimulateAddAccountToCookieCompleted(reconcilor, "user@gmail.com", 769 SimulateAddAccountToCookieCompleted(reconcilor, account_id,
715 GoogleServiceAuthError::AuthErrorNone()); 770 GoogleServiceAuthError::AuthErrorNone());
716 ASSERT_FALSE(reconcilor->is_reconcile_started_); 771 ASSERT_FALSE(reconcilor->is_reconcile_started_);
717 } 772 }
718 773
719 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled, 774 INSTANTIATE_TEST_CASE_P(AccountReconcilorMaybeEnabled,
720 AccountReconcilorTest, 775 AccountReconcilorTest,
721 testing::Bool()); 776 testing::Bool());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698