OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/chromeos/login/login_utils.h" | 5 #include "chrome/browser/chromeos/login/login_utils.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 | 240 |
241 | 241 |
242 class LoginUtilsImpl : public LoginUtils, | 242 class LoginUtilsImpl : public LoginUtils, |
243 public ProfileManagerObserver, | 243 public ProfileManagerObserver, |
244 public GaiaOAuthConsumer { | 244 public GaiaOAuthConsumer { |
245 public: | 245 public: |
246 LoginUtilsImpl() | 246 LoginUtilsImpl() |
247 : background_view_(NULL), | 247 : background_view_(NULL), |
248 pending_requests_(false), | 248 pending_requests_(false), |
249 using_oauth_(false), | 249 using_oauth_(false), |
| 250 has_cookies_(false), |
250 delegate_(NULL) { | 251 delegate_(NULL) { |
251 } | 252 } |
252 | 253 |
253 virtual void PrepareProfile( | 254 virtual void PrepareProfile( |
254 const std::string& username, | 255 const std::string& username, |
255 const std::string& password, | 256 const std::string& password, |
256 const GaiaAuthConsumer::ClientLoginResult& credentials, | 257 const GaiaAuthConsumer::ClientLoginResult& credentials, |
257 bool pending_requests, | 258 bool pending_requests, |
258 bool using_oauth, | 259 bool using_oauth, |
| 260 bool has_cookies, |
259 LoginUtils::Delegate* delegate) OVERRIDE; | 261 LoginUtils::Delegate* delegate) OVERRIDE; |
260 | 262 |
261 // Invoked after the tmpfs is successfully mounted. | 263 // Invoked after the tmpfs is successfully mounted. |
262 // Launches a browser in the incognito mode. | 264 // Launches a browser in the incognito mode. |
263 virtual void CompleteOffTheRecordLogin(const GURL& start_url) OVERRIDE; | 265 virtual void CompleteOffTheRecordLogin(const GURL& start_url) OVERRIDE; |
264 | 266 |
265 // Invoked when the user is logging in for the first time, or is logging in as | 267 // Invoked when the user is logging in for the first time, or is logging in as |
266 // a guest user. | 268 // a guest user. |
267 virtual void SetFirstLoginPrefs(PrefService* prefs) OVERRIDE; | 269 virtual void SetFirstLoginPrefs(PrefService* prefs) OVERRIDE; |
268 | 270 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 void RespectLocalePreference(Profile* pref); | 358 void RespectLocalePreference(Profile* pref); |
357 | 359 |
358 // The current background view. | 360 // The current background view. |
359 chromeos::BackgroundView* background_view_; | 361 chromeos::BackgroundView* background_view_; |
360 | 362 |
361 std::string username_; | 363 std::string username_; |
362 std::string password_; | 364 std::string password_; |
363 GaiaAuthConsumer::ClientLoginResult credentials_; | 365 GaiaAuthConsumer::ClientLoginResult credentials_; |
364 bool pending_requests_; | 366 bool pending_requests_; |
365 bool using_oauth_; | 367 bool using_oauth_; |
| 368 bool has_cookies_; |
366 // Has to be scoped_refptr, see comment for CreateAuthenticator(...). | 369 // Has to be scoped_refptr, see comment for CreateAuthenticator(...). |
367 scoped_refptr<Authenticator> authenticator_; | 370 scoped_refptr<Authenticator> authenticator_; |
368 scoped_ptr<GaiaOAuthFetcher> oauth_fetcher_; | 371 scoped_ptr<GaiaOAuthFetcher> oauth_fetcher_; |
369 scoped_ptr<PolicyOAuthFetcher> policy_oauth_fetcher_; | 372 scoped_ptr<PolicyOAuthFetcher> policy_oauth_fetcher_; |
370 scoped_ptr<OAuthLoginVerifier> oauth_login_verifier_; | 373 scoped_ptr<OAuthLoginVerifier> oauth_login_verifier_; |
371 | 374 |
372 // Delegate to be fired when the profile will be prepared. | 375 // Delegate to be fired when the profile will be prepared. |
373 LoginUtils::Delegate* delegate_; | 376 LoginUtils::Delegate* delegate_; |
374 | 377 |
375 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl); | 378 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl); |
(...skipping 26 matching lines...) Expand all Loading... |
402 | 405 |
403 DISALLOW_COPY_AND_ASSIGN(LoginUtilsWrapper); | 406 DISALLOW_COPY_AND_ASSIGN(LoginUtilsWrapper); |
404 }; | 407 }; |
405 | 408 |
406 void LoginUtilsImpl::PrepareProfile( | 409 void LoginUtilsImpl::PrepareProfile( |
407 const std::string& username, | 410 const std::string& username, |
408 const std::string& password, | 411 const std::string& password, |
409 const GaiaAuthConsumer::ClientLoginResult& credentials, | 412 const GaiaAuthConsumer::ClientLoginResult& credentials, |
410 bool pending_requests, | 413 bool pending_requests, |
411 bool using_oauth, | 414 bool using_oauth, |
| 415 bool has_cookies, |
412 LoginUtils::Delegate* delegate) { | 416 LoginUtils::Delegate* delegate) { |
413 BootTimesLoader* btl = BootTimesLoader::Get(); | 417 BootTimesLoader* btl = BootTimesLoader::Get(); |
414 | 418 |
415 VLOG(1) << "Completing login for " << username; | 419 VLOG(1) << "Completing login for " << username; |
416 | 420 |
417 if (CrosLibrary::Get()->EnsureLoaded()) { | 421 if (CrosLibrary::Get()->EnsureLoaded()) { |
418 btl->AddLoginTimeMarker("StartSession-Start", false); | 422 btl->AddLoginTimeMarker("StartSession-Start", false); |
419 CrosLibrary::Get()->GetLoginLibrary()->StartSession(username, ""); | 423 CrosLibrary::Get()->GetLoginLibrary()->StartSession(username, ""); |
420 btl->AddLoginTimeMarker("StartSession-End", false); | 424 btl->AddLoginTimeMarker("StartSession-End", false); |
421 } | 425 } |
422 | 426 |
423 btl->AddLoginTimeMarker("UserLoggedIn-Start", false); | 427 btl->AddLoginTimeMarker("UserLoggedIn-Start", false); |
424 UserManager::Get()->UserLoggedIn(username); | 428 UserManager::Get()->UserLoggedIn(username); |
425 btl->AddLoginTimeMarker("UserLoggedIn-End", false); | 429 btl->AddLoginTimeMarker("UserLoggedIn-End", false); |
426 | 430 |
427 // Switch log file as soon as possible. | 431 // Switch log file as soon as possible. |
428 logging::RedirectChromeLogging(*(CommandLine::ForCurrentProcess())); | 432 logging::RedirectChromeLogging(*(CommandLine::ForCurrentProcess())); |
429 | 433 |
430 username_ = username; | 434 username_ = username; |
431 password_ = password; | 435 password_ = password; |
432 | 436 |
433 credentials_ = credentials; | 437 credentials_ = credentials; |
434 pending_requests_ = pending_requests; | 438 pending_requests_ = pending_requests; |
435 using_oauth_ = using_oauth; | 439 using_oauth_ = using_oauth; |
| 440 has_cookies_ = has_cookies; |
436 delegate_ = delegate; | 441 delegate_ = delegate; |
437 | 442 |
438 // The default profile will have been changed because the ProfileManager | 443 // The default profile will have been changed because the ProfileManager |
439 // will process the notification that the UserManager sends out. | 444 // will process the notification that the UserManager sends out. |
440 ProfileManager::CreateDefaultProfileAsync(this); | 445 ProfileManager::CreateDefaultProfileAsync(this); |
441 } | 446 } |
442 | 447 |
443 void LoginUtilsImpl::OnProfileCreated(Profile* user_profile, Status status) { | 448 void LoginUtilsImpl::OnProfileCreated(Profile* user_profile, Status status) { |
444 CHECK(user_profile); | 449 CHECK(user_profile); |
445 switch (status) { | 450 switch (status) { |
(...skipping 18 matching lines...) Expand all Loading... |
464 if (!using_oauth_) | 469 if (!using_oauth_) |
465 token_service_for_policy = user_profile->GetTokenService(); | 470 token_service_for_policy = user_profile->GetTokenService(); |
466 browser_policy_connector->InitializeUserPolicy(username_, | 471 browser_policy_connector->InitializeUserPolicy(username_, |
467 user_profile->GetPath(), | 472 user_profile->GetPath(), |
468 token_service_for_policy); | 473 token_service_for_policy); |
469 | 474 |
470 BootTimesLoader* btl = BootTimesLoader::Get(); | 475 BootTimesLoader* btl = BootTimesLoader::Get(); |
471 btl->AddLoginTimeMarker("UserProfileGotten", false); | 476 btl->AddLoginTimeMarker("UserProfileGotten", false); |
472 | 477 |
473 if (using_oauth_) { | 478 if (using_oauth_) { |
474 // Transfer cookies for the new user login. | 479 // Transfer cookies when user signs in using extension. |
475 if (!pending_requests_) { | 480 if (has_cookies_) { |
476 // Transfer cookies from the profile that was used for authentication. | 481 // Transfer cookies from the profile that was used for authentication. |
477 // This profile contains cookies that auth extension should have already | 482 // This profile contains cookies that auth extension should have already |
478 // put in place that will ensure that the newly created session is | 483 // put in place that will ensure that the newly created session is |
479 // authenticated for the websites that work with the used authentication | 484 // authenticated for the websites that work with the used authentication |
480 // schema. | 485 // schema. |
481 if (!TransferDefaultCookies(authenticator_->authentication_profile(), | 486 if (!TransferDefaultCookies(authenticator_->authentication_profile(), |
482 user_profile)) { | 487 user_profile)) { |
483 LOG(WARNING) << "Cookie transfer from the default profile failed!"; | 488 LOG(WARNING) << "Cookie transfer from the default profile failed!"; |
484 } | 489 } |
485 } | 490 } |
486 std::string oauth1_token; | 491 std::string oauth1_token; |
487 std::string oauth1_secret; | 492 std::string oauth1_secret; |
488 if (ReadOAuth1AccessToken(user_profile, &oauth1_token, &oauth1_secret) || | 493 if (!has_cookies_ && |
489 pending_requests_) { | 494 ReadOAuth1AccessToken(user_profile, &oauth1_token, &oauth1_secret)) { |
490 // Verify OAuth access token when we find it in the profile and always if | 495 // Verify OAuth access token when we find it in the profile and no cookies |
491 // we are performing parallel authentication. | 496 // available because user is not signing in using extension. |
492 authenticator_->VerifyOAuth1AccessToken(oauth1_token, oauth1_secret); | 497 authenticator_->VerifyOAuth1AccessToken(oauth1_token, oauth1_secret); |
493 } else { | 498 } else { |
494 // If we don't have it, fetch OAuth1 access token. | 499 // If we don't have it, fetch OAuth1 access token. |
495 // Use off-the-record profile that was used for this step. It should | 500 // Use off-the-record profile that was used for this step. It should |
496 // already contain all needed cookies that will let us skip GAIA's user | 501 // already contain all needed cookies that will let us skip GAIA's user |
497 // authentication UI. | 502 // authentication UI. |
498 // | 503 // |
499 // TODO(rickcam) We should use an isolated App here. | 504 // TODO(rickcam) We should use an isolated App here. |
500 FetchOAuth1AccessToken(authenticator_->authentication_profile()); | 505 FetchOAuth1AccessToken(authenticator_->authentication_profile()); |
501 } | 506 } |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
985 // Mark login host for deletion after browser starts. This | 990 // Mark login host for deletion after browser starts. This |
986 // guarantees that the message loop will be referenced by the | 991 // guarantees that the message loop will be referenced by the |
987 // browser before it is dereferenced by the login host. | 992 // browser before it is dereferenced by the login host. |
988 if (login_host) { | 993 if (login_host) { |
989 login_host->OnSessionStart(); | 994 login_host->OnSessionStart(); |
990 login_host = NULL; | 995 login_host = NULL; |
991 } | 996 } |
992 } | 997 } |
993 | 998 |
994 } // namespace chromeos | 999 } // namespace chromeos |
OLD | NEW |