| Index: chrome/browser/chromeos/login/session/user_session_manager.h
|
| diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h
|
| index 945dc663392079d48596969fb0bd87b8629861e2..b370267328b324168c4103887a02b3c2f110fda5 100644
|
| --- a/chrome/browser/chromeos/login/session/user_session_manager.h
|
| +++ b/chrome/browser/chromeos/login/session/user_session_manager.h
|
| @@ -10,10 +10,12 @@
|
| #include "base/basictypes.h"
|
| #include "base/memory/singleton.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/observer_list.h"
|
| #include "chrome/browser/chromeos/base/locale_util.h"
|
| #include "chrome/browser/chromeos/login/auth/authenticator.h"
|
| #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h"
|
| #include "chrome/browser/chromeos/login/users/user.h"
|
| +#include "chromeos/dbus/session_manager_client.h"
|
| #include "chromeos/login/auth/user_context.h"
|
| #include "net/base/network_change_notifier.h"
|
|
|
| @@ -23,29 +25,41 @@ class Profile;
|
|
|
| namespace chromeos {
|
|
|
| +class UserSessionManagerDelegate {
|
| + public:
|
| + // Called after profile is loaded and prepared for the session.
|
| + virtual void OnProfilePrepared(Profile* profile) = 0;
|
| +
|
| +#if defined(ENABLE_RLZ)
|
| + // Called after post-profile RLZ initialization.
|
| + virtual void OnRlzInitialized();
|
| +#endif
|
| + protected:
|
| + virtual ~UserSessionManagerDelegate();
|
| +};
|
| +
|
| +class UserSessionStateObserver {
|
| + public:
|
| + // Called when UserManager finishes restoring user sessions after crash.
|
| + virtual void PendingUserSessionsRestoreFinished();
|
| +
|
| + protected:
|
| + virtual ~UserSessionStateObserver();
|
| +};
|
| +
|
| // UserSessionManager is responsible for starting user session which includes:
|
| // load and initialize Profile (including custom Profile preferences),
|
| // mark user as logged in and notify observers,
|
| // initialize OAuth2 authentication session,
|
| // initialize and launch user session based on the user type.
|
| -class UserSessionManager :
|
| - public OAuth2LoginManager::Observer,
|
| - public net::NetworkChangeNotifier::ConnectionTypeObserver,
|
| - public base::SupportsWeakPtr<UserSessionManager> {
|
| +// Also supports restoring active user sessions after browser crash:
|
| +// load profile, restore OAuth authentication session etc.
|
| +class UserSessionManager
|
| + : public OAuth2LoginManager::Observer,
|
| + public net::NetworkChangeNotifier::ConnectionTypeObserver,
|
| + public base::SupportsWeakPtr<UserSessionManager>,
|
| + public UserSessionManagerDelegate {
|
| public:
|
| - class Delegate {
|
| - public:
|
| - // Called after profile is loaded and prepared for the session.
|
| - virtual void OnProfilePrepared(Profile* profile) = 0;
|
| -
|
| -#if defined(ENABLE_RLZ)
|
| - // Called after post-profile RLZ initialization.
|
| - virtual void OnRlzInitialized() {}
|
| -#endif
|
| - protected:
|
| - virtual ~Delegate() {}
|
| - };
|
| -
|
| // Returns UserSessionManager instance.
|
| static UserSessionManager* GetInstance();
|
|
|
| @@ -61,7 +75,7 @@ class UserSessionManager :
|
| scoped_refptr<Authenticator> authenticator,
|
| bool has_auth_cookies,
|
| bool has_active_session,
|
| - Delegate* delegate);
|
| + UserSessionManagerDelegate* delegate);
|
|
|
| // Perform additional actions once system wide notification
|
| // "UserLoggedIn" has been sent.
|
| @@ -70,6 +84,17 @@ class UserSessionManager :
|
| // Restores authentication session after crash.
|
| void RestoreAuthenticationSession(Profile* profile);
|
|
|
| + // Usually is called when Chrome is restarted after a crash and there's an
|
| + // active session. First user (one that is passed with --login-user) Chrome
|
| + // session has been already restored at this point. This method asks session
|
| + // manager for all active user sessions, marks them as logged in
|
| + // and notifies observers.
|
| + void RestoreActiveSessions();
|
| +
|
| + // Returns true iff browser has been restarted after crash and UserManager
|
| + // finished restoring user sessions.
|
| + bool UserSessionsRestored() const;
|
| +
|
| // Initialize RLZ.
|
| void InitRlz(Profile* profile);
|
|
|
| @@ -106,10 +131,13 @@ class UserSessionManager :
|
| const User* user,
|
| scoped_ptr<locale_util::SwitchLanguageCallback> callback) const;
|
|
|
| + void AddSessionStateObserver(UserSessionStateObserver* observer);
|
| + void RemoveSessionStateObserver(UserSessionStateObserver* observer);
|
| +
|
| private:
|
| friend struct DefaultSingletonTraits<UserSessionManager>;
|
|
|
| - typedef std::set<std::string> SessionRestoreStateSet;
|
| + typedef std::set<std::string> SigninSessionRestoreStateSet;
|
|
|
| UserSessionManager();
|
| virtual ~UserSessionManager();
|
| @@ -124,6 +152,10 @@ class UserSessionManager :
|
| virtual void OnConnectionTypeChanged(
|
| net::NetworkChangeNotifier::ConnectionType type) OVERRIDE;
|
|
|
| + // UserSessionManagerDelegate overrides:
|
| + // Used when restoring user sessions after crash.
|
| + virtual void OnProfilePrepared(Profile* profile) OVERRIDE;
|
| +
|
| void CreateUserSession(const UserContext& user_context,
|
| bool has_auth_cookies);
|
| void PreStartSession();
|
| @@ -170,7 +202,21 @@ class UserSessionManager :
|
| // loader with it.
|
| void InitializeCertsForPrimaryUser(Profile* profile);
|
|
|
| - Delegate* delegate_;
|
| + // Callback to process RetrieveActiveSessions() request results.
|
| + void OnRestoreActiveSessions(
|
| + const SessionManagerClient::ActiveSessionsMap& sessions,
|
| + bool success);
|
| +
|
| + // Called by OnRestoreActiveSessions() when there're user sessions in
|
| + // |pending_user_sessions_| that has to be restored one by one.
|
| + // Also called after first user session from that list is restored and so on.
|
| + // Process continues till |pending_user_sessions_| map is not empty.
|
| + void RestorePendingUserSessions();
|
| +
|
| + // Notifies observers that user pending sessions restore has finished.
|
| + void NotifyPendingUserSessionsRestoreFinished();
|
| +
|
| + UserSessionManagerDelegate* delegate_;
|
|
|
| // Authentication/user context.
|
| UserContext user_context_;
|
| @@ -180,6 +226,18 @@ class UserSessionManager :
|
| // cookies from the authentication extension login flow.
|
| bool has_auth_cookies_;
|
|
|
| + // Active user session restoration related members.
|
| +
|
| + // True is user sessions has been restored after crash.
|
| + // On a normal boot then login into user sessions this will be false.
|
| + bool user_sessions_restored_;
|
| +
|
| + // User sessions that have to be restored after browser crash.
|
| + // [user_id] > [user_id_hash]
|
| + SessionManagerClient::ActiveSessionsMap pending_user_sessions_;
|
| +
|
| + ObserverList<UserSessionStateObserver> session_state_observer_list_;
|
| +
|
| // OAuth2 session related members.
|
|
|
| // True if we should restart chrome right after session restore.
|
| @@ -193,7 +251,7 @@ class UserSessionManager :
|
|
|
| // Set of user_id for those users that we should restore authentication
|
| // session when notified about online state change.
|
| - SessionRestoreStateSet pending_restore_sessions_;
|
| + SigninSessionRestoreStateSet pending_signin_restore_sessions_;
|
|
|
| // Kiosk mode related members.
|
| // Chrome oauth client id and secret - override values for kiosk mode.
|
|
|