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

Side by Side Diff: chrome/browser/chromeos/login/login_utils.cc

Issue 8499021: UserPolicyCache only becomes ready after policy has been fetched. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Actually waits now, rebased Created 9 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 const char kServiceScopeChromeOS[] = 96 const char kServiceScopeChromeOS[] =
97 "https://www.googleapis.com/auth/chromesync"; 97 "https://www.googleapis.com/auth/chromesync";
98 98
99 const char kServiceScopeChromeOSDeviceManagement[] = 99 const char kServiceScopeChromeOSDeviceManagement[] =
100 "https://www.googleapis.com/auth/chromeosdevicemanagement"; 100 "https://www.googleapis.com/auth/chromeosdevicemanagement";
101 } // namespace 101 } // namespace
102 102
103 // Task for fetching tokens from UI thread. 103 // Task for fetching tokens from UI thread.
104 class StartSyncOnUIThreadTask : public Task { 104 class StartSyncOnUIThreadTask : public Task {
105 public: 105 public:
106 StartSyncOnUIThreadTask( 106 explicit StartSyncOnUIThreadTask(
107 const GaiaAuthConsumer::ClientLoginResult& credentials) 107 const GaiaAuthConsumer::ClientLoginResult& credentials)
108 : credentials_(credentials) {} 108 : credentials_(credentials) {}
109 virtual ~StartSyncOnUIThreadTask() {} 109 virtual ~StartSyncOnUIThreadTask() {}
110 110
111 // Task override. 111 // Task override.
112 virtual void Run() { 112 virtual void Run() OVERRIDE {
113 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 113 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
114 LoginUtils::Get()->FetchCookies(ProfileManager::GetDefaultProfile(), 114 LoginUtils::Get()->FetchCookies(ProfileManager::GetDefaultProfile(),
115 credentials_); 115 credentials_);
116 LoginUtils::Get()->StartSync(ProfileManager::GetDefaultProfile(), 116 LoginUtils::Get()->StartSync(ProfileManager::GetDefaultProfile(),
117 credentials_); 117 credentials_);
118 } 118 }
119 119
120 private: 120 private:
121 GaiaAuthConsumer::ClientLoginResult credentials_; 121 GaiaAuthConsumer::ClientLoginResult credentials_;
122
123 DISALLOW_COPY_AND_ASSIGN(StartSyncOnUIThreadTask);
122 }; 124 };
123 125
124 // Transfers initial set of Profile cookies from the default profile. 126 // Transfers initial set of Profile cookies from the default profile.
125 class TransferDefaultCookiesOnIOThreadTask : public Task { 127 class TransferDefaultCookiesOnIOThreadTask : public Task {
126 public: 128 public:
127 TransferDefaultCookiesOnIOThreadTask( 129 TransferDefaultCookiesOnIOThreadTask(
128 net::URLRequestContextGetter* auth_context, 130 net::URLRequestContextGetter* auth_context,
129 net::URLRequestContextGetter* new_context) 131 net::URLRequestContextGetter* new_context)
130 : auth_context_(auth_context), 132 : auth_context_(auth_context),
131 new_context_(new_context) {} 133 new_context_(new_context) {}
132 virtual ~TransferDefaultCookiesOnIOThreadTask() {} 134 virtual ~TransferDefaultCookiesOnIOThreadTask() {}
133 135
134 // Task override. 136 // Task override.
135 virtual void Run() { 137 virtual void Run() OVERRIDE {
136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
137 net::CookieStore* default_store = 139 net::CookieStore* default_store =
138 auth_context_->GetURLRequestContext()->cookie_store(); 140 auth_context_->GetURLRequestContext()->cookie_store();
139 net::CookieMonster* default_monster = default_store->GetCookieMonster(); 141 net::CookieMonster* default_monster = default_store->GetCookieMonster();
140 default_monster->SetKeepExpiredCookies(); 142 default_monster->SetKeepExpiredCookies();
141 default_monster->GetAllCookiesAsync( 143 default_monster->GetAllCookiesAsync(
142 base::Bind( 144 base::Bind(
143 &TransferDefaultCookiesOnIOThreadTask::InitializeCookieMonster, 145 &TransferDefaultCookiesOnIOThreadTask::InitializeCookieMonster,
144 base::Unretained(this))); 146 base::Unretained(this)));
145 } 147 }
146 148
147 void InitializeCookieMonster(const net::CookieList& cookies) { 149 void InitializeCookieMonster(const net::CookieList& cookies) {
148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
149 net::CookieStore* new_store = 151 net::CookieStore* new_store =
150 new_context_->GetURLRequestContext()->cookie_store(); 152 new_context_->GetURLRequestContext()->cookie_store();
151 net::CookieMonster* new_monster = new_store->GetCookieMonster(); 153 net::CookieMonster* new_monster = new_store->GetCookieMonster();
152 154
153 if (!new_monster->InitializeFrom(cookies)) { 155 if (!new_monster->InitializeFrom(cookies)) {
154 LOG(WARNING) << "Failed initial cookie transfer."; 156 LOG(WARNING) << "Failed initial cookie transfer.";
155 } 157 }
156 } 158 }
157 159
158 private: 160 private:
159 net::URLRequestContextGetter* auth_context_; 161 net::URLRequestContextGetter* auth_context_;
160 net::URLRequestContextGetter* new_context_; 162 net::URLRequestContextGetter* new_context_;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 GaiaConstants::kPicasaService, 219 GaiaConstants::kPicasaService,
218 oauth1_token_, 220 oauth1_token_,
219 oauth1_secret_); 221 oauth1_secret_);
220 } 222 }
221 } 223 }
222 224
223 // GaiaOAuthConsumer implementation: 225 // GaiaOAuthConsumer implementation:
224 virtual void OnOAuthLoginSuccess(const std::string& sid, 226 virtual void OnOAuthLoginSuccess(const std::string& sid,
225 const std::string& lsid, 227 const std::string& lsid,
226 const std::string& auth) OVERRIDE { 228 const std::string& auth) OVERRIDE {
227 GaiaAuthConsumer::ClientLoginResult credentials(sid, 229 GaiaAuthConsumer::ClientLoginResult credentials(
228 lsid, auth, std::string()); 230 sid, lsid, auth, std::string());
229 UserManager::Get()->set_offline_login(false); 231 UserManager::Get()->set_offline_login(false);
230 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 232 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
231 new StartSyncOnUIThreadTask(credentials)); 233 new StartSyncOnUIThreadTask(credentials));
232 } 234 }
233 235
234 virtual void OnOAuthLoginFailure( 236 virtual void OnOAuthLoginFailure(
235 const GoogleServiceAuthError& error) OVERRIDE { 237 const GoogleServiceAuthError& error) OVERRIDE {
236 LOG(WARNING) << "Failed to verify OAuth1 access tokens," 238 LOG(WARNING) << "Failed to verify OAuth1 access tokens,"
237 << " error.state=" << error.state(); 239 << " error.state=" << error.state();
238 240
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 // error. That will make us verify user OAuth token and try to fetch session 305 // error. That will make us verify user OAuth token and try to fetch session
304 // cookies again once we detect that the machine comes online. 306 // cookies again once we detect that the machine comes online.
305 if (error.state() == GoogleServiceAuthError::CONNECTION_FAILED) 307 if (error.state() == GoogleServiceAuthError::CONNECTION_FAILED)
306 UserManager::Get()->set_offline_login(true); 308 UserManager::Get()->set_offline_login(true);
307 } 309 }
308 310
309 GaiaAuthFetcher gaia_fetcher_; 311 GaiaAuthFetcher gaia_fetcher_;
310 DISALLOW_COPY_AND_ASSIGN(UserSessionCookieFetcher); 312 DISALLOW_COPY_AND_ASSIGN(UserSessionCookieFetcher);
311 }; 313 };
312 314
313 315 // Fetches the oauth token for the device management service. Since Profile
314 // Fetches an OAuth token and initializes user policy with it. 316 // creation might be blocking on a user policy fetch, this fetcher must always
317 // send a (possibly empty) token to the BrowserPolicyConnector, which will then
318 // let the policy subsystem proceed and resume Profile creation.
319 // Sending the token even when no Profile is pending is also OK.
315 class PolicyOAuthFetcher : public GaiaOAuthConsumer { 320 class PolicyOAuthFetcher : public GaiaOAuthConsumer {
316 public: 321 public:
322 // Fetches the device management service's oauth token using |oauth1_token|
323 // and |oauth1_secret| as access tokens.
317 PolicyOAuthFetcher(Profile* profile, 324 PolicyOAuthFetcher(Profile* profile,
318 const std::string& oauth1_token, 325 const std::string& oauth1_token,
319 const std::string& oauth1_secret) 326 const std::string& oauth1_secret)
320 : oauth_fetcher_(this, 327 : oauth_fetcher_(this,
321 profile->GetRequestContext(), 328 profile->GetRequestContext(),
322 profile, 329 profile,
323 kServiceScopeChromeOSDeviceManagement), 330 kServiceScopeChromeOSDeviceManagement),
324 oauth1_token_(oauth1_token), 331 oauth1_token_(oauth1_token),
325 oauth1_secret_(oauth1_secret) { 332 oauth1_secret_(oauth1_secret) {
326 oauth_fetcher_.SetAutoFetchLimit(
327 GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN);
328 } 333 }
334
335 // Fetches the device management service's oauth token, after also retrieving
336 // the access tokens.
337 explicit PolicyOAuthFetcher(Profile* profile)
338 : oauth_fetcher_(this,
339 profile->GetRequestContext(),
340 profile,
341 kServiceScopeChromeOSDeviceManagement) {
342 }
343
329 virtual ~PolicyOAuthFetcher() {} 344 virtual ~PolicyOAuthFetcher() {}
330 345
331 void Start() { 346 void Start() {
332 oauth_fetcher_.StartOAuthWrapBridge( 347 oauth_fetcher_.SetAutoFetchLimit(
333 oauth1_token_, oauth1_secret_, GaiaConstants::kGaiaOAuthDuration, 348 GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN);
334 std::string(kServiceScopeChromeOSDeviceManagement)); 349
350 if (oauth1_token_.empty()) {
351 oauth_fetcher_.StartGetOAuthTokenRequest();
352 } else {
353 oauth_fetcher_.StartOAuthWrapBridge(
354 oauth1_token_, oauth1_secret_, GaiaConstants::kGaiaOAuthDuration,
355 std::string(kServiceScopeChromeOSDeviceManagement));
356 }
335 } 357 }
336 358
337 // GaiaOAuthConsumer implementation: 359 const std::string& oauth1_token() const { return oauth1_token_; }
360 const std::string& oauth1_secret() const { return oauth1_secret_; }
361
362 private:
363 virtual void OnGetOAuthTokenSuccess(const std::string& oauth_token) OVERRIDE {
364 VLOG(1) << "Got OAuth request token";
365 }
366
367 virtual void OnGetOAuthTokenFailure(
368 const GoogleServiceAuthError& error) OVERRIDE {
369 LOG(WARNING) << "Failed to get OAuth request token";
370 SetPolicyToken("");
371 }
372
373 virtual void OnOAuthGetAccessTokenSuccess(
374 const std::string& token,
375 const std::string& secret) OVERRIDE {
376 VLOG(1) << "Got OAuth access token";
377 oauth1_token_ = token;
378 oauth1_secret_ = secret;
379 }
380
381 virtual void OnOAuthGetAccessTokenFailure(
382 const GoogleServiceAuthError& error) OVERRIDE {
383 LOG(WARNING) << "Failed to get OAuth access token";
384 SetPolicyToken("");
385 }
386
338 virtual void OnOAuthWrapBridgeSuccess( 387 virtual void OnOAuthWrapBridgeSuccess(
339 const std::string& service_name, 388 const std::string& service_name,
340 const std::string& token, 389 const std::string& token,
341 const std::string& expires_in) OVERRIDE { 390 const std::string& expires_in) OVERRIDE {
342 policy::BrowserPolicyConnector* browser_policy_connector = 391 VLOG(1) << "Got OAuth access token for " << service_name;
343 g_browser_process->browser_policy_connector(); 392 SetPolicyToken(token);
344 browser_policy_connector->RegisterForUserPolicy(token);
345 } 393 }
346 394
347 virtual void OnOAuthWrapBridgeFailure( 395 virtual void OnOAuthWrapBridgeFailure(
348 const std::string& service_name, 396 const std::string& service_name,
349 const GoogleServiceAuthError& error) OVERRIDE { 397 const GoogleServiceAuthError& error) OVERRIDE {
350 LOG(WARNING) << "Failed to get OAuth access token for " << service_name; 398 LOG(WARNING) << "Failed to get OAuth access token for " << service_name;
399 SetPolicyToken("");
351 } 400 }
352 401
353 private: 402 void SetPolicyToken(const std::string& token) {
403 g_browser_process->browser_policy_connector()->RegisterForUserPolicy(token);
404 }
405
354 GaiaOAuthFetcher oauth_fetcher_; 406 GaiaOAuthFetcher oauth_fetcher_;
355 std::string oauth1_token_; 407 std::string oauth1_token_;
356 std::string oauth1_secret_; 408 std::string oauth1_secret_;
357 409
358 DISALLOW_COPY_AND_ASSIGN(PolicyOAuthFetcher); 410 DISALLOW_COPY_AND_ASSIGN(PolicyOAuthFetcher);
359 }; 411 };
360 412
361 // Used to request a restart to switch to the guest mode. 413 // Used to request a restart to switch to the guest mode.
362 class JobRestartRequest 414 class JobRestartRequest
363 : public base::RefCountedThreadSafe<JobRestartRequest> { 415 : public base::RefCountedThreadSafe<JobRestartRequest> {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 Profile* new_profile) OVERRIDE; 505 Profile* new_profile) OVERRIDE;
454 virtual void TransferDefaultAuthCache(Profile* default_profile, 506 virtual void TransferDefaultAuthCache(Profile* default_profile,
455 Profile* new_profile) OVERRIDE; 507 Profile* new_profile) OVERRIDE;
456 508
457 // ProfileManagerObserver implementation: 509 // ProfileManagerObserver implementation:
458 virtual void OnProfileCreated(Profile* profile, Status status) OVERRIDE; 510 virtual void OnProfileCreated(Profile* profile, Status status) OVERRIDE;
459 511
460 // GaiaOAuthConsumer overrides. 512 // GaiaOAuthConsumer overrides.
461 virtual void OnGetOAuthTokenSuccess(const std::string& oauth_token) OVERRIDE; 513 virtual void OnGetOAuthTokenSuccess(const std::string& oauth_token) OVERRIDE;
462 virtual void OnGetOAuthTokenFailure( 514 virtual void OnGetOAuthTokenFailure(
463 const GoogleServiceAuthError& error) OVERRIDE; 515 const GoogleServiceAuthError& error) OVERRIDE;
464 virtual void OnOAuthGetAccessTokenSuccess(const std::string& token, 516 virtual void OnOAuthGetAccessTokenSuccess(const std::string& token,
465 const std::string& secret) OVERRIDE; 517 const std::string& secret) OVERRIDE;
466 virtual void OnOAuthGetAccessTokenFailure( 518 virtual void OnOAuthGetAccessTokenFailure(
467 const GoogleServiceAuthError& error) OVERRIDE; 519 const GoogleServiceAuthError& error) OVERRIDE;
468 520
469 // net::NetworkChangeNotifier::OnlineStateObserver overrides. 521 // net::NetworkChangeNotifier::OnlineStateObserver overrides.
470 virtual void OnOnlineStateChanged(bool online) OVERRIDE; 522 virtual void OnOnlineStateChanged(bool online) OVERRIDE;
471 523
472 // Given the authenticated credentials from the cookie jar, try to exchange 524 // Given the authenticated credentials from the cookie jar, try to exchange
473 // fetch OAuth request, v1 and v2 tokens. 525 // fetch OAuth request, v1 and v2 tokens.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 std::string username_; 572 std::string username_;
521 std::string password_; 573 std::string password_;
522 GaiaAuthConsumer::ClientLoginResult credentials_; 574 GaiaAuthConsumer::ClientLoginResult credentials_;
523 bool pending_requests_; 575 bool pending_requests_;
524 bool using_oauth_; 576 bool using_oauth_;
525 bool has_cookies_; 577 bool has_cookies_;
526 // Has to be scoped_refptr, see comment for CreateAuthenticator(...). 578 // Has to be scoped_refptr, see comment for CreateAuthenticator(...).
527 scoped_refptr<Authenticator> authenticator_; 579 scoped_refptr<Authenticator> authenticator_;
528 scoped_ptr<GaiaOAuthFetcher> oauth_fetcher_; 580 scoped_ptr<GaiaOAuthFetcher> oauth_fetcher_;
529 scoped_ptr<PolicyOAuthFetcher> policy_oauth_fetcher_; 581 scoped_ptr<PolicyOAuthFetcher> policy_oauth_fetcher_;
582 scoped_ptr<PolicyOAuthFetcher> policy_oauth_early_fetcher_;
Mattias Nissler (ping if slow) 2011/11/11 11:41:23 I don't see why we need two pointers here, wouldn'
Joao da Silva 2011/11/11 12:55:14 The 2nd pointer was used to distinguish early poli
530 scoped_ptr<OAuthLoginVerifier> oauth_login_verifier_; 583 scoped_ptr<OAuthLoginVerifier> oauth_login_verifier_;
531 584
532 // Delegate to be fired when the profile will be prepared. 585 // Delegate to be fired when the profile will be prepared.
533 LoginUtils::Delegate* delegate_; 586 LoginUtils::Delegate* delegate_;
534 587
535 // Used to restart Chrome to switch to the guest mode. 588 // Used to restart Chrome to switch to the guest mode.
536 JobRestartRequest* job_restart_request_; 589 JobRestartRequest* job_restart_request_;
537 590
538 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl); 591 DISALLOW_COPY_AND_ASSIGN(LoginUtilsImpl);
539 }; 592 };
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 username_ = username; 648 username_ = username;
596 password_ = password; 649 password_ = password;
597 650
598 credentials_ = credentials; 651 credentials_ = credentials;
599 pending_requests_ = pending_requests; 652 pending_requests_ = pending_requests;
600 using_oauth_ = using_oauth; 653 using_oauth_ = using_oauth;
601 has_cookies_ = has_cookies; 654 has_cookies_ = has_cookies;
602 delegate_ = delegate; 655 delegate_ = delegate;
603 656
604 // Initialize user policy before the profile is created so the profile 657 // Initialize user policy before the profile is created so the profile
605 // initialization code sees the policy settings. 658 // initialization code sees the cached policy settings.
606 g_browser_process->browser_policy_connector()->InitializeUserPolicy(username); 659 policy::BrowserPolicyConnector* connector =
660 g_browser_process->browser_policy_connector();
661 bool user_policy_needs_fetch = connector->InitializeUserPolicy(username);
662 if (user_policy_needs_fetch) {
663 if (using_oauth_ && authenticator_.get()) {
664 // Profile creation will block until user policy is fetched, which
665 // requires the DeviceManagement token. Try to fetch it now.
666 VLOG(1) << "Profile creation requires policy token, fetching now";
667 policy_oauth_early_fetcher_.reset(
668 new PolicyOAuthFetcher(authenticator_->authentication_profile()));
669 policy_oauth_early_fetcher_->Start();
670 } else {
671 // Tell the policy subsystem to resume without a policy fetch.
672 connector->RegisterForUserPolicy("");
673 }
674 }
607 675
608 // The default profile will have been changed because the ProfileManager 676 // The default profile will have been changed because the ProfileManager
609 // will process the notification that the UserManager sends out. 677 // will process the notification that the UserManager sends out.
610 ProfileManager::CreateDefaultProfileAsync(this); 678 ProfileManager::CreateDefaultProfileAsync(this);
611 } 679 }
612 680
613 void LoginUtilsImpl::DelegateDeleted(Delegate* delegate) { 681 void LoginUtilsImpl::DelegateDeleted(Delegate* delegate) {
614 if (delegate_ == delegate) 682 if (delegate_ == delegate)
615 delegate_ = NULL; 683 delegate_ = NULL;
616 } 684 }
617 685
618 void LoginUtilsImpl::OnProfileCreated(Profile* user_profile, Status status) { 686 void LoginUtilsImpl::OnProfileCreated(Profile* user_profile, Status status) {
619 CHECK(user_profile); 687 CHECK(user_profile);
620 switch (status) { 688 switch (status) {
621 case STATUS_INITIALIZED: 689 case STATUS_INITIALIZED:
622 break; 690 break;
623 case STATUS_CREATED: 691 case STATUS_CREATED:
624 if (UserManager::Get()->current_user_is_new()) 692 if (UserManager::Get()->current_user_is_new())
625 SetFirstLoginPrefs(user_profile->GetPrefs()); 693 SetFirstLoginPrefs(user_profile->GetPrefs());
626 RespectLocalePreference(user_profile); 694 RespectLocalePreference(user_profile);
627 return; 695 return;
628 case STATUS_FAIL: 696 case STATUS_FAIL:
629 default: 697 default:
630 NOTREACHED(); 698 NOTREACHED();
631 return; 699 return;
632 } 700 }
633 701
634 // Initialize the user-policy backend. 702 // Initialize the user-policy backend.
635 policy::BrowserPolicyConnector* browser_policy_connector =
636 g_browser_process->browser_policy_connector();
637
638 if (!using_oauth_) { 703 if (!using_oauth_) {
639 browser_policy_connector->SetUserPolicyTokenService( 704 g_browser_process->browser_policy_connector()->
640 user_profile->GetTokenService()); 705 SetUserPolicyTokenService(user_profile->GetTokenService());
641 } 706 }
642 707
643 // We suck. This is a hack since we do not have the enterprise feature 708 // We suck. This is a hack since we do not have the enterprise feature
644 // done yet to pull down policies from the domain admin. We'll take this 709 // done yet to pull down policies from the domain admin. We'll take this
645 // out when we get that done properly. 710 // out when we get that done properly.
646 // TODO(xiyuan): Remove this once enterprise feature is ready. 711 // TODO(xiyuan): Remove this once enterprise feature is ready.
647 if (EndsWith(username_, "@google.com", true)) { 712 if (EndsWith(username_, "@google.com", true)) {
648 PrefService* pref_service = user_profile->GetPrefs(); 713 PrefService* pref_service = user_profile->GetPrefs();
649 pref_service->SetBoolean(prefs::kEnableScreenLock, true); 714 pref_service->SetBoolean(prefs::kEnableScreenLock, true);
650 } 715 }
651 716
652 BootTimesLoader* btl = BootTimesLoader::Get(); 717 BootTimesLoader* btl = BootTimesLoader::Get();
653 btl->AddLoginTimeMarker("UserProfileGotten", false); 718 btl->AddLoginTimeMarker("UserProfileGotten", false);
654 719
655 if (using_oauth_) { 720 if (using_oauth_) {
721 // Reuse the access token fetched by the PolicyOAuthFetcher, if it was
722 // used to fetch policies before Profile creation.
723 if (policy_oauth_early_fetcher_.get()) {
724 VLOG(1) << "Resuming profile creation after fetching policy token";
725 StoreOAuth1AccessToken(user_profile,
726 policy_oauth_early_fetcher_->oauth1_token(),
727 policy_oauth_early_fetcher_->oauth1_secret());
728 }
729
656 // Transfer cookies when user signs in using extension. 730 // Transfer cookies when user signs in using extension.
657 if (has_cookies_) { 731 if (has_cookies_) {
658 // Transfer cookies from the profile that was used for authentication. 732 // Transfer cookies from the profile that was used for authentication.
659 // This profile contains cookies that auth extension should have already 733 // This profile contains cookies that auth extension should have already
660 // put in place that will ensure that the newly created session is 734 // put in place that will ensure that the newly created session is
661 // authenticated for the websites that work with the used authentication 735 // authenticated for the websites that work with the used authentication
662 // schema. 736 // schema.
663 TransferDefaultCookies(authenticator_->authentication_profile(), 737 TransferDefaultCookies(authenticator_->authentication_profile(),
664 user_profile); 738 user_profile);
665 } 739 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 // TODO(altimofeev): Need to sanitize memory used to store password. 813 // TODO(altimofeev): Need to sanitize memory used to store password.
740 credentials_ = GaiaAuthConsumer::ClientLoginResult(); 814 credentials_ = GaiaAuthConsumer::ClientLoginResult();
741 } 815 }
742 816
743 void LoginUtilsImpl::FetchOAuth1AccessToken(Profile* auth_profile) { 817 void LoginUtilsImpl::FetchOAuth1AccessToken(Profile* auth_profile) {
744 oauth_fetcher_.reset(new GaiaOAuthFetcher(this, 818 oauth_fetcher_.reset(new GaiaOAuthFetcher(this,
745 auth_profile->GetRequestContext(), 819 auth_profile->GetRequestContext(),
746 auth_profile, 820 auth_profile,
747 kServiceScopeChromeOS)); 821 kServiceScopeChromeOS));
748 // Let's first get the Oauth request token and OAuth1 token+secret. 822 // Let's first get the Oauth request token and OAuth1 token+secret.
749 // One we get that, we will kick off individial requests for OAuth2 tokens for 823 // Once we get that, we will kick off individual requests for OAuth2 tokens
750 // all our services. 824 // for all our services.
751 oauth_fetcher_->SetAutoFetchLimit(GaiaOAuthFetcher::OAUTH1_ALL_ACCESS_TOKEN); 825 oauth_fetcher_->SetAutoFetchLimit(GaiaOAuthFetcher::OAUTH1_ALL_ACCESS_TOKEN);
752 oauth_fetcher_->StartGetOAuthTokenRequest(); 826 oauth_fetcher_->StartGetOAuthTokenRequest();
753 } 827 }
754 828
755 void LoginUtilsImpl::FetchCookies(Profile* user_profile, 829 void LoginUtilsImpl::FetchCookies(Profile* user_profile,
756 const GaiaAuthConsumer::ClientLoginResult& credentials) { 830 const GaiaAuthConsumer::ClientLoginResult& credentials) {
757 if (!using_oauth_) { 831 if (!using_oauth_) {
758 // Take the credentials passed in and try to exchange them for 832 // Take the credentials passed in and try to exchange them for
759 // full-fledged Google authentication cookies. This is 833 // full-fledged Google authentication cookies. This is
760 // best-effort; it's possible that we'll fail due to network 834 // best-effort; it's possible that we'll fail due to network
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 password_, false); 867 password_, false);
794 username_ = ""; 868 username_ = "";
795 password_ = ""; 869 password_ = "";
796 870
797 token_service->Initialize(GaiaConstants::kChromeOSSource, user_profile); 871 token_service->Initialize(GaiaConstants::kChromeOSSource, user_profile);
798 token_service->LoadTokensFromDB(); 872 token_service->LoadTokensFromDB();
799 } 873 }
800 token_service->UpdateCredentials(credentials); 874 token_service->UpdateCredentials(credentials);
801 if (token_service->AreCredentialsValid()) 875 if (token_service->AreCredentialsValid())
802 token_service->StartFetchingTokens(); 876 token_service->StartFetchingTokens();
803
804 } 877 }
805 878
806 void LoginUtilsImpl::RespectLocalePreference(Profile* profile) { 879 void LoginUtilsImpl::RespectLocalePreference(Profile* profile) {
807 DCHECK(profile != NULL); 880 DCHECK(profile != NULL);
808 PrefService* prefs = profile->GetPrefs(); 881 PrefService* prefs = profile->GetPrefs();
809 DCHECK(prefs != NULL); 882 DCHECK(prefs != NULL);
810 if (g_browser_process == NULL) 883 if (g_browser_process == NULL)
811 return; 884 return;
812 885
813 std::string pref_locale = prefs->GetString(prefs::kApplicationLocale); 886 std::string pref_locale = prefs->GetString(prefs::kApplicationLocale);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 void LoginUtilsImpl::OnOAuthGetAccessTokenSuccess(const std::string& token, 1134 void LoginUtilsImpl::OnOAuthGetAccessTokenSuccess(const std::string& token,
1062 const std::string& secret) { 1135 const std::string& secret) {
1063 VLOG(1) << "Got OAuth v1 token!"; 1136 VLOG(1) << "Got OAuth v1 token!";
1064 Profile* user_profile = ProfileManager::GetDefaultProfile(); 1137 Profile* user_profile = ProfileManager::GetDefaultProfile();
1065 StoreOAuth1AccessToken(user_profile, token, secret); 1138 StoreOAuth1AccessToken(user_profile, token, secret);
1066 1139
1067 // Verify OAuth1 token by doing OAuthLogin and fetching credentials. 1140 // Verify OAuth1 token by doing OAuthLogin and fetching credentials.
1068 VerifyOAuth1AccessToken(user_profile, token, secret); 1141 VerifyOAuth1AccessToken(user_profile, token, secret);
1069 } 1142 }
1070 1143
1144 void LoginUtilsImpl::OnOAuthGetAccessTokenFailure(
1145 const GoogleServiceAuthError& error) {
1146 // TODO(zelidrag): Pop up sync setup UI here?
1147 LOG(WARNING) << "Failed fetching OAuth request token";
Mattias Nissler (ping if slow) 2011/11/11 11:41:23 This logged error.state() before, why did you drop
Joao da Silva 2011/11/11 12:55:14 Done.
1148 }
1149
1071 void LoginUtilsImpl::FetchSecondaryTokens(Profile* offrecord_profile, 1150 void LoginUtilsImpl::FetchSecondaryTokens(Profile* offrecord_profile,
1072 const std::string& token, 1151 const std::string& token,
1073 const std::string& secret) { 1152 const std::string& secret) {
1074 FetchPolicyToken(offrecord_profile, token, secret); 1153 FetchPolicyToken(offrecord_profile, token, secret);
1075 // TODO(rickcam, zelidrag): Wire TokenService there when it becomes 1154 // TODO(rickcam, zelidrag): Wire TokenService there when it becomes
1076 // capable of handling OAuth1 tokens directly. 1155 // capable of handling OAuth1 tokens directly.
1077 } 1156 }
1078 1157
1079 bool LoginUtilsImpl::ReadOAuth1AccessToken(Profile* user_profile, 1158 bool LoginUtilsImpl::ReadOAuth1AccessToken(Profile* user_profile,
1080 std::string* token, 1159 std::string* token,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 token, 1214 token,
1136 secret, 1215 secret,
1137 username_)); 1216 username_));
1138 oauth_login_verifier_->Start(); 1217 oauth_login_verifier_->Start();
1139 } 1218 }
1140 1219
1141 1220
1142 void LoginUtilsImpl::FetchPolicyToken(Profile* offrecord_profile, 1221 void LoginUtilsImpl::FetchPolicyToken(Profile* offrecord_profile,
1143 const std::string& token, 1222 const std::string& token,
1144 const std::string& secret) { 1223 const std::string& secret) {
1145 // Trigger oauth token fetch for user policy. 1224 if (policy_oauth_early_fetcher_.get()) {
1146 policy_oauth_fetcher_.reset(new PolicyOAuthFetcher(offrecord_profile, 1225 // User policy has already been fetched. Reset the early policy fetcher
1147 token, 1226 // now, so that subsequent calls of FetchSecondaryTokens fetch the policy
1148 secret)); 1227 // token again.
1149 policy_oauth_fetcher_->Start(); 1228 policy_oauth_early_fetcher_.reset();
1229 } else {
1230 // Trigger oauth token fetch for user policy.
1231 policy_oauth_fetcher_.reset(new PolicyOAuthFetcher(offrecord_profile,
1232 token,
1233 secret));
1234 policy_oauth_fetcher_->Start();
1235 }
1150 1236
1151 // TODO(zelidrag): We should add initialization of other services somewhere 1237 // TODO(zelidrag): We should add initialization of other services somewhere
1152 // here as well. This could be handled with TokenService class once it is 1238 // here as well. This could be handled with TokenService class once it is
1153 // ready to handle OAuth tokens. 1239 // ready to handle OAuth tokens.
1154 1240
1155 // We don't need authenticator instance any more, reset it so that 1241 // We don't need authenticator instance any more, reset it so that
1156 // ScreenLocker would create a separate instance. 1242 // ScreenLocker would create a separate instance.
1157 // TODO(nkostylev): There's a potential race if SL would be created before 1243 // TODO(nkostylev): There's a potential race if SL would be created before
1158 // OAuth tokens are fetched. It would use incorrect Authenticator instance. 1244 // OAuth tokens are fetched. It would use incorrect Authenticator instance.
1159 authenticator_ = NULL; 1245 authenticator_ = NULL;
1160 } 1246 }
1161 1247
1162 void LoginUtilsImpl::OnOAuthGetAccessTokenFailure(
1163 const GoogleServiceAuthError& error) {
1164 // TODO(zelidrag): Pop up sync setup UI here?
1165 LOG(WARNING) << "Failed fetching OAuth v1 token, error: " << error.state();
1166 }
1167
1168 void LoginUtilsImpl::OnOnlineStateChanged(bool online) { 1248 void LoginUtilsImpl::OnOnlineStateChanged(bool online) {
1169 // If we come online for the first time after successful offline login, 1249 // If we come online for the first time after successful offline login,
1170 // we need to kick of OAuth token verification process again. 1250 // we need to kick of OAuth token verification process again.
1171 if (UserManager::Get()->user_is_logged_in() && 1251 if (UserManager::Get()->user_is_logged_in() &&
1172 UserManager::Get()->offline_login() && online) { 1252 UserManager::Get()->offline_login() && online) {
1173 if (!authenticator_.get()) 1253 if (!authenticator_.get())
1174 CreateAuthenticator(NULL); 1254 CreateAuthenticator(NULL);
1175 std::string oauth1_token; 1255 std::string oauth1_token;
1176 std::string oauth1_secret; 1256 std::string oauth1_secret;
1177 Profile* user_profile = ProfileManager::GetDefaultProfile(); 1257 Profile* user_profile = ProfileManager::GetDefaultProfile();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 // Mark login host for deletion after browser starts. This 1291 // Mark login host for deletion after browser starts. This
1212 // guarantees that the message loop will be referenced by the 1292 // guarantees that the message loop will be referenced by the
1213 // browser before it is dereferenced by the login host. 1293 // browser before it is dereferenced by the login host.
1214 if (login_host) { 1294 if (login_host) {
1215 login_host->OnSessionStart(); 1295 login_host->OnSessionStart();
1216 login_host = NULL; 1296 login_host = NULL;
1217 } 1297 }
1218 } 1298 }
1219 1299
1220 } // namespace chromeos 1300 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/policy/browser_policy_connector.h » ('j') | chrome/browser/policy/browser_policy_connector.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698