| Index: chrome/browser/chromeos/login/oauth2_login_manager.cc
|
| diff --git a/chrome/browser/chromeos/login/oauth2_login_manager.cc b/chrome/browser/chromeos/login/oauth2_login_manager.cc
|
| index b5efe020333c7d1e5580e5fde47c3f29b4fd3ce3..b357a6a0b7af7d6b4e6f9622dce28297351cca35 100644
|
| --- a/chrome/browser/chromeos/login/oauth2_login_manager.cc
|
| +++ b/chrome/browser/chromeos/login/oauth2_login_manager.cc
|
| @@ -23,7 +23,8 @@ namespace chromeos {
|
|
|
| OAuth2LoginManager::OAuth2LoginManager(OAuthLoginManager::Delegate* delegate)
|
| : OAuthLoginManager(delegate),
|
| - loading_reported_(false) {
|
| + loading_reported_(false),
|
| + session_start_signaled_(false) {
|
| }
|
|
|
| OAuth2LoginManager::~OAuth2LoginManager() {
|
| @@ -44,6 +45,9 @@ void OAuth2LoginManager::RestoreSession(
|
| refresh_token_ = oauth2_refresh_token;
|
| auth_code_ = auth_code;
|
|
|
| + DCHECK(!session_start_signaled_);
|
| + session_start_signaled_ = false;
|
| +
|
| // TODO(nkostylev): drop the previous fetchers if RestoreSession() is invoked
|
| // for a second Profile, when using multi-profiles. This avoids the DCHECKs
|
| // below until OAuthLoginManager fully supports multi-profiles.
|
| @@ -85,6 +89,7 @@ void OAuth2LoginManager::OnRefreshTokenAvailable(
|
| const std::string& account_id) {
|
| // TODO(fgorski): Once ProfileOAuth2TokenService supports multi-login, make
|
| // sure to restore session cookies in the context of the correct account_id.
|
| + LOG(INFO) << "OnRefreshTokenAvailable";
|
| RestoreSessionCookies();
|
| }
|
|
|
| @@ -109,6 +114,8 @@ void OAuth2LoginManager::LoadAndVerifyOAuth2Tokens() {
|
|
|
| void OAuth2LoginManager::FetchOAuth2Tokens() {
|
| DCHECK(auth_request_context_.get());
|
| + SignalMergeSessionStart();
|
| +
|
| // If we have authenticated cookie jar, get OAuth1 token first, then fetch
|
| // SID/LSID cookies through OAuthLogin call.
|
| if (restore_strategy_ == RESTORE_FROM_COOKIE_JAR) {
|
| @@ -123,6 +130,7 @@ void OAuth2LoginManager::FetchOAuth2Tokens() {
|
| oauth2_token_fetcher_->StartExchangeFromAuthCode(auth_code_);
|
| } else {
|
| NOTREACHED();
|
| + SignalMergeSessionEnd();
|
| }
|
| }
|
|
|
| @@ -145,6 +153,7 @@ void OAuth2LoginManager::OnOAuth2TokensFetchFailed() {
|
|
|
| void OAuth2LoginManager::RestoreSessionCookies() {
|
| DCHECK(!login_verifier_.get());
|
| + SignalMergeSessionStart();
|
| login_verifier_.reset(
|
| new OAuth2LoginVerifier(this,
|
| g_browser_process->system_request_context(),
|
| @@ -167,7 +176,7 @@ void OAuth2LoginManager::OnOAuthLoginFailure() {
|
| UMA_HISTOGRAM_ENUMERATION("OAuth2Login.SessionRestore",
|
| SESSION_RESTORE_OAUTHLOGIN_FAILED,
|
| SESSION_RESTORE_COUNT);
|
| - delegate_->OnCompletedMergeSession();
|
| + SignalMergeSessionEnd();
|
| }
|
|
|
| void OAuth2LoginManager::OnSessionMergeSuccess() {
|
| @@ -179,7 +188,7 @@ void OAuth2LoginManager::OnSessionMergeSuccess() {
|
| UMA_HISTOGRAM_ENUMERATION("OAuth2Login.SessionRestore",
|
| SESSION_RESTORE_SUCCESS,
|
| SESSION_RESTORE_COUNT);
|
| - delegate_->OnCompletedMergeSession();
|
| + SignalMergeSessionEnd();
|
| }
|
|
|
| void OAuth2LoginManager::OnSessionMergeFailure() {
|
| @@ -191,7 +200,7 @@ void OAuth2LoginManager::OnSessionMergeFailure() {
|
| UMA_HISTOGRAM_ENUMERATION("OAuth2Login.SessionRestore",
|
| SESSION_RESTORE_MERGE_SESSION_FAILED,
|
| SESSION_RESTORE_COUNT);
|
| - delegate_->OnCompletedMergeSession();
|
| + SignalMergeSessionEnd();
|
| }
|
|
|
| void OAuth2LoginManager::StartTokenService(
|
| @@ -208,4 +217,16 @@ void OAuth2LoginManager::StopObservingRefreshToken() {
|
| }
|
| }
|
|
|
| +void OAuth2LoginManager::SignalMergeSessionStart() {
|
| + if (session_start_signaled_)
|
| + return;
|
| +
|
| + delegate_->OnStartMergeSession(user_profile_);
|
| + session_start_signaled_ = true;
|
| +}
|
| +
|
| +void OAuth2LoginManager::SignalMergeSessionEnd() {
|
| + delegate_->OnCompletedMergeSession();
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|