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" |
11 #include "base/prefs/testing_pref_service.h" | 11 #include "base/prefs/testing_pref_service.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
14 #include "chrome/browser/prefs/browser_prefs.h" | 14 #include "chrome/browser/prefs/browser_prefs.h" |
| 15 #include "chrome/browser/signin/chrome_signin_manager_delegate.h" |
15 #include "chrome/browser/signin/token_service.h" | 16 #include "chrome/browser/signin/token_service.h" |
16 #include "chrome/browser/signin/token_service_unittest.h" | 17 #include "chrome/browser/signin/token_service_unittest.h" |
17 #include "chrome/browser/webdata/web_data_service.h" | 18 #include "chrome/browser/webdata/web_data_service.h" |
18 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
19 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
20 #include "chrome/common/url_constants.h" | 21 #include "chrome/common/url_constants.h" |
21 #include "chrome/test/base/testing_browser_process.h" | 22 #include "chrome/test/base/testing_browser_process.h" |
22 #include "chrome/test/base/testing_profile.h" | 23 #include "chrome/test/base/testing_profile.h" |
23 #include "components/webdata/encryptor/encryptor.h" | 24 #include "components/webdata/encryptor/encryptor.h" |
24 #include "content/public/browser/child_process_security_policy.h" | 25 #include "content/public/browser/child_process_security_policy.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 profile_->GetRequestContext()->GetURLRequestContext(); | 65 profile_->GetRequestContext()->GetURLRequestContext(); |
65 io_setup_complete->Signal(); | 66 io_setup_complete->Signal(); |
66 } | 67 } |
67 | 68 |
68 virtual void SetUp() OVERRIDE { | 69 virtual void SetUp() OVERRIDE { |
69 prefs_.reset(new TestingPrefServiceSimple); | 70 prefs_.reset(new TestingPrefServiceSimple); |
70 chrome::RegisterLocalState(prefs_->registry()); | 71 chrome::RegisterLocalState(prefs_->registry()); |
71 TestingBrowserProcess::GetGlobal()->SetLocalState( | 72 TestingBrowserProcess::GetGlobal()->SetLocalState( |
72 prefs_.get()); | 73 prefs_.get()); |
73 TokenServiceTestHarness::SetUp(); | 74 TokenServiceTestHarness::SetUp(); |
74 manager_.reset(new SigninManager()); | 75 manager_.reset(new SigninManager( |
| 76 scoped_ptr<SigninManagerDelegate>( |
| 77 new ChromeSigninManagerDelegate(profile_.get())))); |
75 google_login_success_.ListenFor( | 78 google_login_success_.ListenFor( |
76 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, | 79 chrome::NOTIFICATION_GOOGLE_SIGNIN_SUCCESSFUL, |
77 content::Source<Profile>(profile_.get())); | 80 content::Source<Profile>(profile_.get())); |
78 google_login_failure_.ListenFor(chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED, | 81 google_login_failure_.ListenFor(chrome::NOTIFICATION_GOOGLE_SIGNIN_FAILED, |
79 content::Source<Profile>(profile_.get())); | 82 content::Source<Profile>(profile_.get())); |
80 | 83 |
81 io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO)); | 84 io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO)); |
82 ASSERT_TRUE(io_thread_->Start()); | 85 ASSERT_TRUE(io_thread_->Start()); |
83 base::WaitableEvent io_setup_complete(true, false); | 86 base::WaitableEvent io_setup_complete(true, false); |
84 BrowserThread::PostTask( | 87 BrowserThread::PostTask( |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 // This is flow, the oauth2 credentials should already be available in | 201 // This is flow, the oauth2 credentials should already be available in |
199 // the token service. | 202 // the token service. |
200 EXPECT_TRUE(service_->HasOAuthLoginToken()); | 203 EXPECT_TRUE(service_->HasOAuthLoginToken()); |
201 | 204 |
202 // Should go into token service and stop. | 205 // Should go into token service and stop. |
203 EXPECT_EQ(1U, google_login_success_.size()); | 206 EXPECT_EQ(1U, google_login_success_.size()); |
204 EXPECT_EQ(0U, google_login_failure_.size()); | 207 EXPECT_EQ(0U, google_login_failure_.size()); |
205 | 208 |
206 // Should persist across resets. | 209 // Should persist across resets. |
207 manager_->Shutdown(); | 210 manager_->Shutdown(); |
208 manager_.reset(new SigninManager()); | 211 manager_.reset(new SigninManager( |
| 212 scoped_ptr<SigninManagerDelegate>( |
| 213 new ChromeSigninManagerDelegate(profile_.get())))); |
209 manager_->Initialize(profile_.get()); | 214 manager_->Initialize(profile_.get()); |
210 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | 215 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
211 } | 216 } |
212 | 217 |
213 // Helper method that wraps the logic when signin with credentials | 218 // Helper method that wraps the logic when signin with credentials |
214 // should fail. If |requestSent| is true, then simulate valid resopnse. | 219 // should fail. If |requestSent| is true, then simulate valid resopnse. |
215 // Otherwise the sign-in is aborted before any request is sent, thus no need | 220 // Otherwise the sign-in is aborted before any request is sent, thus no need |
216 // to simulatate response. | 221 // to simulatate response. |
217 void ExpectSignInWithCredentialsFail(bool requestSent) { | 222 void ExpectSignInWithCredentialsFail(bool requestSent) { |
218 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 223 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 | 273 |
269 service_->OnIssueAuthTokenSuccess(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 274 service_->OnIssueAuthTokenSuccess(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
270 "oauth2Token"); | 275 "oauth2Token"); |
271 SimulateValidUberToken(); | 276 SimulateValidUberToken(); |
272 // Check that the login cookie has been sent. | 277 // Check that the login cookie has been sent. |
273 ASSERT_NE(std::find(cookies_.begin(), cookies_.end(), "checkCookie = true"), | 278 ASSERT_NE(std::find(cookies_.begin(), cookies_.end(), "checkCookie = true"), |
274 cookies_.end()); | 279 cookies_.end()); |
275 | 280 |
276 // Should persist across resets. | 281 // Should persist across resets. |
277 manager_->Shutdown(); | 282 manager_->Shutdown(); |
278 manager_.reset(new SigninManager()); | 283 manager_.reset(new SigninManager( |
| 284 scoped_ptr<SigninManagerDelegate>( |
| 285 new ChromeSigninManagerDelegate(profile_.get())))); |
279 manager_->Initialize(profile_.get()); | 286 manager_->Initialize(profile_.get()); |
280 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | 287 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
281 } | 288 } |
282 | 289 |
283 TEST_F(SigninManagerTest, SignInWithCredentials) { | 290 TEST_F(SigninManagerTest, SignInWithCredentials) { |
284 manager_->Initialize(profile_.get()); | 291 manager_->Initialize(profile_.get()); |
285 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 292 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
286 | 293 |
287 manager_->StartSignInWithCredentials( | 294 manager_->StartSignInWithCredentials( |
288 "0", | 295 "0", |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 manager_->ClearTransientSigninData(); | 470 manager_->ClearTransientSigninData(); |
464 EXPECT_TRUE(manager_->last_result_.data.empty()); | 471 EXPECT_TRUE(manager_->last_result_.data.empty()); |
465 EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); | 472 EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); |
466 | 473 |
467 // Ensure preferences are not modified. | 474 // Ensure preferences are not modified. |
468 EXPECT_FALSE( | 475 EXPECT_FALSE( |
469 profile_->GetPrefs()->GetString(prefs::kGoogleServicesUsername).empty()); | 476 profile_->GetPrefs()->GetString(prefs::kGoogleServicesUsername).empty()); |
470 | 477 |
471 // On reset it should be regenerated. | 478 // On reset it should be regenerated. |
472 manager_->Shutdown(); | 479 manager_->Shutdown(); |
473 manager_.reset(new SigninManager()); | 480 manager_.reset(new SigninManager( |
| 481 scoped_ptr<SigninManagerDelegate>( |
| 482 new ChromeSigninManagerDelegate(profile_.get())))); |
474 manager_->Initialize(profile_.get()); | 483 manager_->Initialize(profile_.get()); |
475 | 484 |
476 // Now make sure we have the right user name. | 485 // Now make sure we have the right user name. |
477 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | 486 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
478 } | 487 } |
479 | 488 |
480 TEST_F(SigninManagerTest, SignOutClientLogin) { | 489 TEST_F(SigninManagerTest, SignOutClientLogin) { |
481 manager_->Initialize(profile_.get()); | 490 manager_->Initialize(profile_.get()); |
482 manager_->StartSignIn("username", "password", std::string(), std::string()); | 491 manager_->StartSignIn("username", "password", std::string(), std::string()); |
483 SimulateValidResponseClientLogin(false); | 492 SimulateValidResponseClientLogin(false); |
484 manager_->OnClientLoginSuccess(credentials_); | 493 manager_->OnClientLoginSuccess(credentials_); |
485 | 494 |
486 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); | 495 EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
487 manager_->SignOut(); | 496 manager_->SignOut(); |
488 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 497 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
489 // Should not be persisted anymore | 498 // Should not be persisted anymore |
490 manager_->Shutdown(); | 499 manager_->Shutdown(); |
491 manager_.reset(new SigninManager()); | 500 manager_.reset(new SigninManager( |
| 501 scoped_ptr<SigninManagerDelegate>( |
| 502 new ChromeSigninManagerDelegate(profile_.get())))); |
492 manager_->Initialize(profile_.get()); | 503 manager_->Initialize(profile_.get()); |
493 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 504 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
494 } | 505 } |
495 | 506 |
496 TEST_F(SigninManagerTest, SignInFailureClientLogin) { | 507 TEST_F(SigninManagerTest, SignInFailureClientLogin) { |
497 manager_->Initialize(profile_.get()); | 508 manager_->Initialize(profile_.get()); |
498 manager_->StartSignIn("username", "password", std::string(), std::string()); | 509 manager_->StartSignIn("username", "password", std::string(), std::string()); |
499 GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED); | 510 GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED); |
500 manager_->OnClientLoginFailure(error); | 511 manager_->OnClientLoginFailure(error); |
501 | 512 |
502 EXPECT_EQ(0U, google_login_success_.size()); | 513 EXPECT_EQ(0U, google_login_success_.size()); |
503 EXPECT_EQ(1U, google_login_failure_.size()); | 514 EXPECT_EQ(1U, google_login_failure_.size()); |
504 | 515 |
505 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 516 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
506 | 517 |
507 // Should not be persisted | 518 // Should not be persisted |
508 manager_->Shutdown(); | 519 manager_->Shutdown(); |
509 manager_.reset(new SigninManager()); | 520 manager_.reset(new SigninManager( |
| 521 scoped_ptr<SigninManagerDelegate>( |
| 522 new ChromeSigninManagerDelegate(profile_.get())))); |
510 manager_->Initialize(profile_.get()); | 523 manager_->Initialize(profile_.get()); |
511 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); | 524 EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
512 } | 525 } |
513 | 526 |
514 TEST_F(SigninManagerTest, ProvideSecondFactorSuccess) { | 527 TEST_F(SigninManagerTest, ProvideSecondFactorSuccess) { |
515 manager_->Initialize(profile_.get()); | 528 manager_->Initialize(profile_.get()); |
516 manager_->StartSignIn("username", "password", std::string(), std::string()); | 529 manager_->StartSignIn("username", "password", std::string(), std::string()); |
517 GoogleServiceAuthError error(GoogleServiceAuthError::TWO_FACTOR); | 530 GoogleServiceAuthError error(GoogleServiceAuthError::TWO_FACTOR); |
518 manager_->OnClientLoginFailure(error); | 531 manager_->OnClientLoginFailure(error); |
519 | 532 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 GURL("http://accounts.google.com/ServiceLogin?service=chromiumsync"))); | 607 GURL("http://accounts.google.com/ServiceLogin?service=chromiumsync"))); |
595 // http, not https, should not be treated as web based signin. | 608 // http, not https, should not be treated as web based signin. |
596 EXPECT_FALSE(SigninManager::IsWebBasedSigninFlowURL( | 609 EXPECT_FALSE(SigninManager::IsWebBasedSigninFlowURL( |
597 GURL("http://accounts.google.com/ServiceLogin?service=googlemail"))); | 610 GURL("http://accounts.google.com/ServiceLogin?service=googlemail"))); |
598 // chromiumsync is double-embedded in a continue query param. | 611 // chromiumsync is double-embedded in a continue query param. |
599 EXPECT_TRUE(SigninManager::IsWebBasedSigninFlowURL( | 612 EXPECT_TRUE(SigninManager::IsWebBasedSigninFlowURL( |
600 GURL("https://accounts.google.com/CheckCookie?" | 613 GURL("https://accounts.google.com/CheckCookie?" |
601 "continue=https%3A%2F%2Fwww.google.com%2Fintl%2Fen-US%2Fchrome" | 614 "continue=https%3A%2F%2Fwww.google.com%2Fintl%2Fen-US%2Fchrome" |
602 "%2Fblank.html%3Fsource%3D3%26nonadv%3D1&service=chromiumsync"))); | 615 "%2Fblank.html%3Fsource%3D3%26nonadv%3D1&service=chromiumsync"))); |
603 } | 616 } |
OLD | NEW |