Index: chrome/browser/chromeos/login/session/user_session_manager.cc |
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc |
index 50f75fb68cd713c08ddc28c90c3147a267af8aac..17aee896b8e568484a20e51941d525876ec81b1f 100644 |
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc |
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc |
@@ -402,6 +402,30 @@ scoped_refptr<Authenticator> UserSessionManager::CreateAuthenticator( |
return authenticator_; |
} |
+void UserSessionManager::FetchOAuth2Tokens( |
+ const UserContext& user_context, |
+ const FetchOAuth2TokensCallback& callback) { |
+ DCHECK(!user_context.GetAuthCode().empty()); |
+ login_callback_ = callback; |
+ user_context_ = user_context; |
+ oauth2_token_fetcher_.reset(new OAuth2TokenFetcher( |
+ this, g_browser_process->system_request_context())); |
+ oauth2_token_fetcher_->StartExchangeFromAuthCode(user_context.GetAuthCode()); |
+} |
+ |
+void UserSessionManager::OnOAuth2TokensAvailable( |
+ const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) { |
+ VLOG(1) << "OAuth2 tokens fetched"; |
+ |
+ refresh_token_ = oauth2_tokens.refresh_token; |
+ oauthlogin_access_token_ = oauth2_tokens.access_token; |
+ login_callback_.Run(user_context_, LoginPerformer::AUTH_MODE_EXTENSION); |
+} |
+ |
+void UserSessionManager::OnOAuth2TokensFetchFailed() { |
+ LOG(WARNING) << "UserSessionManager::OnOAuth2TokensFetchFailed"; |
xiyuan
2015/04/20 22:02:41
Should we still call login_callback_.Run()? Otherw
achuithb
2015/04/21 07:10:21
Done.
|
+} |
+ |
void UserSessionManager::StartSession( |
const UserContext& user_context, |
StartSessionType start_session_type, |
@@ -802,6 +826,13 @@ void UserSessionManager::StopChildStatusObserving() { |
void UserSessionManager::CreateUserSession(const UserContext& user_context, |
bool has_auth_cookies) { |
user_context_ = user_context; |
+ |
+ // If we have already fetched OAuth2 tokens, set them here. |
+ if (!refresh_token_.empty()) |
+ user_context_.SetRefreshToken(refresh_token_); |
+ if (!oauthlogin_access_token_.empty()) |
+ user_context_.SetAuthCode(std::string()); |
xiyuan
2015/04/20 22:02:41
Move 831-834 to OnOAuth2TokensAvailable.
achuithb
2015/04/21 07:10:21
Done.
|
+ |
has_auth_cookies_ = has_auth_cookies; |
InitSessionRestoreStrategy(); |
StoreUserContextDataBeforeProfileIsCreated(); |
@@ -1214,8 +1245,9 @@ void UserSessionManager::InitSessionRestoreStrategy() { |
if (has_auth_cookies_) { |
session_restore_strategy_ = OAuth2LoginManager::RESTORE_FROM_COOKIE_JAR; |
- } else if (!user_context_.GetAuthCode().empty()) { |
- session_restore_strategy_ = OAuth2LoginManager::RESTORE_FROM_AUTH_CODE; |
+ } else if (!oauthlogin_access_token_.empty()) { |
+ session_restore_strategy_ = |
+ OAuth2LoginManager::RESTORE_FROM_PASSED_OAUTH2_ACCESS_TOKEN; |
xiyuan
2015/04/20 22:02:41
We probably don't need a new strategy. After we ge
achuithb
2015/04/21 07:10:21
So RESTORE_FROM_PASSED_OAUTH2_REFRESH_TOKEN doesn'
xiyuan
2015/04/22 00:37:17
Yes, it should as long as refresh token is involve
achuithb
2015/04/22 22:58:14
Done.
|
} else if (!user_context_.GetRefreshToken().empty()) { |
session_restore_strategy_ = |
OAuth2LoginManager::RESTORE_FROM_PASSED_OAUTH2_REFRESH_TOKEN; |
@@ -1257,7 +1289,7 @@ void UserSessionManager::RestoreAuthSessionImpl( |
} |
login_manager->RestoreSession(auth_request_context, session_restore_strategy_, |
user_context_.GetRefreshToken(), |
- user_context_.GetAuthCode()); |
+ oauthlogin_access_token_); |
} |
void UserSessionManager::InitRlzImpl(Profile* profile, bool disabled) { |