OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/signin/signin_manager.h" | 5 #include "chrome/browser/signin/signin_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 | 202 |
203 net::TestURLFetcherFactory factory_; | 203 net::TestURLFetcherFactory factory_; |
204 scoped_ptr<SigninManager> manager_; | 204 scoped_ptr<SigninManager> manager_; |
205 content::TestNotificationTracker google_login_success_; | 205 content::TestNotificationTracker google_login_success_; |
206 content::TestNotificationTracker google_login_failure_; | 206 content::TestNotificationTracker google_login_failure_; |
207 std::vector<std::string> oauth_tokens_fetched_; | 207 std::vector<std::string> oauth_tokens_fetched_; |
208 scoped_ptr<TestingPrefServiceSimple> prefs_; | 208 scoped_ptr<TestingPrefServiceSimple> prefs_; |
209 std::vector<std::string> cookies_; | 209 std::vector<std::string> cookies_; |
210 }; | 210 }; |
211 | 211 |
212 // NOTE: ClientLogin's "StartSignin" is called after collecting credentials | |
213 // from the user. | |
214 TEST_F(SigninManagerTest, SignInClientLogin) { | |
215 manager_->Initialize(profile(), NULL); | |
216 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
217 | |
218 manager_->StartSignIn( | |
219 "user@gmail.com", "password", std::string(), std::string()); | |
220 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
221 | |
222 SimulateValidResponseClientLogin(true); | |
223 EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); | |
224 | |
225 // Should go into token service and stop. | |
226 EXPECT_EQ(1U, google_login_success_.size()); | |
227 EXPECT_EQ(0U, google_login_failure_.size()); | |
228 | |
229 service()->OnIssueAuthTokenSuccess( | |
230 GaiaConstants::kGaiaOAuth2LoginRefreshToken, | |
231 "oauth2Token"); | |
232 SimulateValidUberToken(); | |
233 // Check that the login cookie has been sent. | |
234 ASSERT_NE(std::find(cookies_.begin(), cookies_.end(), "checkCookie = true"), | |
235 cookies_.end()); | |
236 | |
237 // Should persist across resets. | |
238 manager_->Shutdown(); | |
239 manager_.reset(new SigninManager( | |
240 scoped_ptr<SigninManagerDelegate>( | |
241 new ChromeSigninManagerDelegate(profile())))); | |
242 manager_->Initialize(profile(), NULL); | |
243 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | |
244 } | |
245 | |
246 TEST_F(SigninManagerTest, SignInWithCredentials) { | 212 TEST_F(SigninManagerTest, SignInWithCredentials) { |
247 manager_->Initialize(profile(), NULL); | 213 manager_->Initialize(profile(), NULL); |
248 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 214 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
249 | 215 |
250 manager_->StartSignInWithCredentials( | 216 manager_->StartSignInWithCredentials( |
251 "0", | 217 "0", |
252 "user@gmail.com", | 218 "user@gmail.com", |
253 "password", | 219 "password", |
254 SigninManager::OAuthTokenFetchedCallback()); | 220 SigninManager::OAuthTokenFetchedCallback()); |
255 | 221 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 "user@gmail.com", | 355 "user@gmail.com", |
390 "password", | 356 "password", |
391 callback); | 357 callback); |
392 | 358 |
393 // Signin should fail since it would be cancelled by the callback. | 359 // Signin should fail since it would be cancelled by the callback. |
394 ExpectSignInWithCredentialsFail(true); | 360 ExpectSignInWithCredentialsFail(true); |
395 ASSERT_EQ(1U, oauth_tokens_fetched_.size()); | 361 ASSERT_EQ(1U, oauth_tokens_fetched_.size()); |
396 EXPECT_EQ(oauth_tokens_fetched_[0], "rt1"); | 362 EXPECT_EQ(oauth_tokens_fetched_[0], "rt1"); |
397 } | 363 } |
398 | 364 |
399 TEST_F(SigninManagerTest, SignInClientLoginNoGPlus) { | 365 TEST_F(SigninManagerTest, SignOut) { |
400 manager_->Initialize(profile(), NULL); | 366 manager_->Initialize(profile(), NULL); |
401 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 367 SigninManager::OAuthTokenFetchedCallback dummy; |
| 368 manager_->StartSignInWithCredentials("0", "user@gmail.com", "password", |
| 369 dummy); |
| 370 ExpectSignInWithCredentialsSuccess(); |
402 | 371 |
403 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
404 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
405 | |
406 SimulateValidResponseClientLogin(false); | |
407 EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); | |
408 } | |
409 | |
410 TEST_F(SigninManagerTest, ClearTransientSigninData) { | |
411 manager_->Initialize(profile(), NULL); | |
412 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
413 | |
414 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
415 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
416 | |
417 SimulateValidResponseClientLogin(false); | |
418 | |
419 // Should go into token service and stop. | |
420 EXPECT_EQ(1U, google_login_success_.size()); | |
421 EXPECT_EQ(0U, google_login_failure_.size()); | |
422 | |
423 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | |
424 | |
425 // Now clear the in memory data. | |
426 manager_->ClearTransientSigninData(); | |
427 EXPECT_TRUE(manager_->last_result_.data.empty()); | |
428 EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); | |
429 | |
430 // Ensure preferences are not modified. | |
431 EXPECT_FALSE( | |
432 profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername).empty()); | |
433 | |
434 // On reset it should be regenerated. | |
435 manager_->Shutdown(); | |
436 manager_.reset(new SigninManager( | |
437 scoped_ptr<SigninManagerDelegate>( | |
438 new ChromeSigninManagerDelegate(profile())))); | |
439 manager_->Initialize(profile(), NULL); | |
440 | |
441 // Now make sure we have the right user name. | |
442 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | |
443 } | |
444 | |
445 TEST_F(SigninManagerTest, SignOutClientLogin) { | |
446 manager_->Initialize(profile(), NULL); | |
447 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
448 SimulateValidResponseClientLogin(false); | |
449 manager_->OnClientLoginSuccess(credentials()); | |
450 | |
451 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | |
452 manager_->SignOut(); | 372 manager_->SignOut(); |
453 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 373 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
454 // Should not be persisted anymore | 374 // Should not be persisted anymore |
455 manager_->Shutdown(); | 375 manager_->Shutdown(); |
456 manager_.reset(new SigninManager( | 376 manager_.reset(new SigninManager( |
457 scoped_ptr<SigninManagerDelegate>( | 377 scoped_ptr<SigninManagerDelegate>( |
458 new ChromeSigninManagerDelegate(profile())))); | 378 new ChromeSigninManagerDelegate(profile())))); |
459 manager_->Initialize(profile(), NULL); | 379 manager_->Initialize(profile(), NULL); |
460 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 380 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
461 } | 381 } |
462 | 382 |
463 TEST_F(SigninManagerTest, SignInFailureClientLogin) { | |
464 manager_->Initialize(profile(), NULL); | |
465 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
466 GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED); | |
467 manager_->OnClientLoginFailure(error); | |
468 | |
469 EXPECT_EQ(0U, google_login_success_.size()); | |
470 EXPECT_EQ(1U, google_login_failure_.size()); | |
471 | |
472 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
473 | |
474 // Should not be persisted | |
475 manager_->Shutdown(); | |
476 manager_.reset(new SigninManager( | |
477 scoped_ptr<SigninManagerDelegate>( | |
478 new ChromeSigninManagerDelegate(profile())))); | |
479 manager_->Initialize(profile(), NULL); | |
480 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
481 } | |
482 | |
483 TEST_F(SigninManagerTest, ProvideSecondFactorSuccess) { | |
484 manager_->Initialize(profile(), NULL); | |
485 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
486 GoogleServiceAuthError error(GoogleServiceAuthError::TWO_FACTOR); | |
487 manager_->OnClientLoginFailure(error); | |
488 | |
489 EXPECT_EQ(0U, google_login_success_.size()); | |
490 EXPECT_EQ(1U, google_login_failure_.size()); | |
491 | |
492 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
493 EXPECT_FALSE(manager_->possibly_invalid_username_.empty()); | |
494 | |
495 manager_->ProvideSecondFactorAccessCode("access"); | |
496 SimulateValidResponseClientLogin(false); | |
497 | |
498 EXPECT_EQ(1U, google_login_success_.size()); | |
499 EXPECT_EQ(1U, google_login_failure_.size()); | |
500 } | |
501 | |
502 TEST_F(SigninManagerTest, ProvideSecondFactorFailure) { | |
503 manager_->Initialize(profile(), NULL); | |
504 manager_->StartSignIn("username", "password", std::string(), std::string()); | |
505 GoogleServiceAuthError error1(GoogleServiceAuthError::TWO_FACTOR); | |
506 manager_->OnClientLoginFailure(error1); | |
507 | |
508 EXPECT_EQ(0U, google_login_success_.size()); | |
509 EXPECT_EQ(1U, google_login_failure_.size()); | |
510 | |
511 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
512 EXPECT_FALSE(manager_->possibly_invalid_username_.empty()); | |
513 | |
514 manager_->ProvideSecondFactorAccessCode("badaccess"); | |
515 GoogleServiceAuthError error2( | |
516 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); | |
517 manager_->OnClientLoginFailure(error2); | |
518 | |
519 EXPECT_EQ(0U, google_login_success_.size()); | |
520 EXPECT_EQ(2U, google_login_failure_.size()); | |
521 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
522 | |
523 manager_->ProvideSecondFactorAccessCode("badaccess"); | |
524 GoogleServiceAuthError error3(GoogleServiceAuthError::CONNECTION_FAILED); | |
525 manager_->OnClientLoginFailure(error3); | |
526 | |
527 EXPECT_EQ(0U, google_login_success_.size()); | |
528 EXPECT_EQ(3U, google_login_failure_.size()); | |
529 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | |
530 } | |
531 | |
532 TEST_F(SigninManagerTest, SignOutMidConnect) { | 383 TEST_F(SigninManagerTest, SignOutMidConnect) { |
533 manager_->Initialize(profile(), NULL); | 384 manager_->Initialize(profile(), NULL); |
534 manager_->StartSignIn("username", "password", std::string(), std::string()); | 385 SigninManager::OAuthTokenFetchedCallback dummy; |
535 EXPECT_EQ("username", manager_->GetUsernameForAuthInProgress()); | 386 manager_->StartSignInWithCredentials("0", "user@gmail.com", "password", |
| 387 dummy); |
| 388 |
536 manager_->SignOut(); | 389 manager_->SignOut(); |
537 EXPECT_EQ(0U, google_login_success_.size()); | 390 EXPECT_EQ(0U, google_login_success_.size()); |
538 EXPECT_EQ(1U, google_login_failure_.size()); | 391 EXPECT_EQ(1U, google_login_failure_.size()); |
539 | 392 |
540 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 393 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
541 EXPECT_TRUE(manager_->GetUsernameForAuthInProgress().empty()); | 394 EXPECT_TRUE(manager_->GetUsernameForAuthInProgress().empty()); |
542 } | 395 } |
543 | 396 |
544 TEST_F(SigninManagerTest, SignOutWhileProhibited) { | 397 TEST_F(SigninManagerTest, SignOutWhileProhibited) { |
545 manager_->Initialize(profile(), NULL); | 398 manager_->Initialize(profile(), NULL); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 EXPECT_EQ("", manager_->GetAuthenticatedUsername()); | 476 EXPECT_EQ("", manager_->GetAuthenticatedUsername()); |
624 EXPECT_EQ(0u, google_login_success_.size()); | 477 EXPECT_EQ(0u, google_login_success_.size()); |
625 | 478 |
626 manager_->OnExternalSigninCompleted("external@example.com"); | 479 manager_->OnExternalSigninCompleted("external@example.com"); |
627 EXPECT_EQ(1u, google_login_success_.size()); | 480 EXPECT_EQ(1u, google_login_success_.size()); |
628 EXPECT_EQ(0u, google_login_failure_.size()); | 481 EXPECT_EQ(0u, google_login_failure_.size()); |
629 EXPECT_EQ("external@example.com", | 482 EXPECT_EQ("external@example.com", |
630 profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername)); | 483 profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername)); |
631 EXPECT_EQ("external@example.com", manager_->GetAuthenticatedUsername()); | 484 EXPECT_EQ("external@example.com", manager_->GetAuthenticatedUsername()); |
632 } | 485 } |
OLD | NEW |