Index: chrome/browser/chromeos/login/login_utils.cc |
diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc |
index b67175f647cd528fe04a7f6c1aa6f2d0b5c70ae0..f6adb128c3d19418cac1d7d23e9300e60c33639a 100644 |
--- a/chrome/browser/chromeos/login/login_utils.cc |
+++ b/chrome/browser/chromeos/login/login_utils.cc |
@@ -200,6 +200,19 @@ class LoginUtilsImpl |
// the authentication profile. |
void CompleteProfileCreate(Profile* user_profile); |
+ // Callback to resume profile preparing after start session. |
+ void OnSessionStarted(const UserContext& user_context, |
+ const std::string& display_email, |
+ bool has_cookies, |
+ LoginUtils::Delegate* delegate, |
+ bool success); |
+ |
+ // Complete profile preparation with having active session. |
+ void CompletePrepareProfileWithActiveSession(const UserContext& user_context, |
+ const std::string& display_email, |
+ bool has_cookies, |
+ LoginUtils::Delegate* delegate); |
+ |
// Finalized profile preparation. |
void FinalizePrepareProfile(Profile* user_profile); |
@@ -400,10 +413,42 @@ void LoginUtilsImpl::PrepareProfile( |
if (!has_active_session) { |
btl->AddLoginTimeMarker("StartSession-Start", false); |
DBusThreadManager::Get()->GetSessionManagerClient()->StartSession( |
- user_context.username); |
- btl->AddLoginTimeMarker("StartSession-End", false); |
+ user_context.username, |
+ base::Bind(&LoginUtilsImpl::OnSessionStarted, |
+ AsWeakPtr(), |
+ user_context, |
+ display_email, |
+ has_cookies, |
+ delegate)); |
+ return; |
+ } |
+ CompletePrepareProfileWithActiveSession( |
+ user_context, display_email, has_cookies, delegate); |
+} |
+ |
+void LoginUtilsImpl::OnSessionStarted(const UserContext& user_context, |
+ const std::string& display_email, |
+ bool has_cookies, |
+ LoginUtils::Delegate* delegate, |
+ bool success) { |
+ BootTimesLoader* btl = BootTimesLoader::Get(); |
+ btl->AddLoginTimeMarker("StartSession-End", false); |
+ |
+ if (!success) { |
+ LOG(ERROR) << "StartSession failed"; |
+ chrome::AttemptUserExit(); |
+ return; |
} |
+ CompletePrepareProfileWithActiveSession( |
+ user_context, display_email, has_cookies, delegate); |
+} |
+void LoginUtilsImpl::CompletePrepareProfileWithActiveSession( |
+ const UserContext& user_context, |
+ const std::string& display_email, |
+ bool has_cookies, |
+ LoginUtils::Delegate* delegate) { |
+ BootTimesLoader* btl = BootTimesLoader::Get(); |
btl->AddLoginTimeMarker("UserLoggedIn-Start", false); |
UserManager* user_manager = UserManager::Get(); |
user_manager->UserLoggedIn(user_context.username, |