| Index: chrome/browser/chromeos/login/users/chrome_user_manager.h
|
| diff --git a/chrome/browser/chromeos/login/users/user_manager_impl.h b/chrome/browser/chromeos/login/users/chrome_user_manager.h
|
| similarity index 38%
|
| copy from chrome/browser/chromeos/login/users/user_manager_impl.h
|
| copy to chrome/browser/chromeos/login/users/chrome_user_manager.h
|
| index 46ed7c9d01414155e32c6912e6dedefa1ccd2ecf..84dd7d96288d89eb6848e1069e017f605b8df22a 100644
|
| --- a/chrome/browser/chromeos/login/users/user_manager_impl.h
|
| +++ b/chrome/browser/chromeos/login/users/chrome_user_manager.h
|
| @@ -2,8 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
|
| -#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
|
| +#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
|
| +#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
|
|
|
| #include <map>
|
| #include <string>
|
| @@ -13,12 +13,13 @@
|
| #include "base/containers/hash_tables.h"
|
| #include "base/memory/linked_ptr.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/observer_list.h"
|
| #include "base/synchronization/lock.h"
|
| #include "base/time/time.h"
|
| #include "chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.h"
|
| #include "chrome/browser/chromeos/login/users/multi_profile_user_controller_delegate.h"
|
| -#include "chrome/browser/chromeos/login/users/user_manager.h"
|
| +#include "chrome/browser/chromeos/login/users/user_manager_base.h"
|
| #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
|
| #include "chrome/browser/chromeos/policy/cloud_external_data_policy_observer.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
|
| @@ -42,15 +43,15 @@ class RemoveUserDelegate;
|
| class SupervisedUserManagerImpl;
|
| class SessionLengthLimiter;
|
|
|
| -// Implementation of the UserManager.
|
| -class UserManagerImpl
|
| - : public UserManager,
|
| +// Chrome specific implementation of the UserManager.
|
| +class ChromeUserManager
|
| + : public UserManagerBase,
|
| public content::NotificationObserver,
|
| public policy::CloudExternalDataPolicyObserver::Delegate,
|
| public policy::DeviceLocalAccountPolicyService::Observer,
|
| public MultiProfileUserControllerDelegate {
|
| public:
|
| - virtual ~UserManagerImpl();
|
| + virtual ~ChromeUserManager();
|
|
|
| // UserManager implementation:
|
| virtual void Shutdown() OVERRIDE;
|
| @@ -58,69 +59,18 @@ class UserManagerImpl
|
| virtual UserImageManager* GetUserImageManager(
|
| const std::string& user_id) OVERRIDE;
|
| virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE;
|
| - virtual const user_manager::UserList& GetUsers() const OVERRIDE;
|
| virtual user_manager::UserList GetUsersAdmittedForMultiProfile()
|
| const OVERRIDE;
|
| - virtual const user_manager::UserList& GetLoggedInUsers() const OVERRIDE;
|
| - virtual const user_manager::UserList& GetLRULoggedInUsers() OVERRIDE;
|
| virtual user_manager::UserList GetUnlockUsers() const OVERRIDE;
|
| - virtual const std::string& GetOwnerEmail() OVERRIDE;
|
| - virtual void UserLoggedIn(const std::string& user_id,
|
| - const std::string& user_id_hash,
|
| - bool browser_restart) OVERRIDE;
|
| - virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE;
|
| virtual void SessionStarted() OVERRIDE;
|
| - virtual void RemoveUser(const std::string& user_id,
|
| - RemoveUserDelegate* delegate) OVERRIDE;
|
| - virtual void RemoveUserFromList(const std::string& user_id) OVERRIDE;
|
| - virtual bool IsKnownUser(const std::string& user_id) const OVERRIDE;
|
| - virtual const user_manager::User* FindUser(
|
| - const std::string& user_id) const OVERRIDE;
|
| - virtual user_manager::User* FindUserAndModify(
|
| - const std::string& user_id) OVERRIDE;
|
| - virtual const user_manager::User* GetLoggedInUser() const OVERRIDE;
|
| - virtual user_manager::User* GetLoggedInUser() OVERRIDE;
|
| - virtual const user_manager::User* GetActiveUser() const OVERRIDE;
|
| - virtual user_manager::User* GetActiveUser() OVERRIDE;
|
| - virtual const user_manager::User* GetPrimaryUser() const OVERRIDE;
|
| virtual void SaveUserOAuthStatus(
|
| const std::string& user_id,
|
| user_manager::User::OAuthTokenStatus oauth_token_status) OVERRIDE;
|
| - virtual void SaveForceOnlineSignin(const std::string& user_id,
|
| - bool force_online_signin) OVERRIDE;
|
| virtual void SaveUserDisplayName(const std::string& user_id,
|
| const base::string16& display_name) OVERRIDE;
|
| - virtual base::string16 GetUserDisplayName(
|
| - const std::string& user_id) const OVERRIDE;
|
| - virtual void SaveUserDisplayEmail(const std::string& user_id,
|
| - const std::string& display_email) OVERRIDE;
|
| - virtual std::string GetUserDisplayEmail(
|
| - const std::string& user_id) const OVERRIDE;
|
| - virtual void UpdateUserAccountData(
|
| - const std::string& user_id,
|
| - const UserAccountData& account_data) OVERRIDE;
|
| - virtual bool IsCurrentUserOwner() const OVERRIDE;
|
| - virtual bool IsCurrentUserNew() const OVERRIDE;
|
| - virtual bool IsCurrentUserNonCryptohomeDataEphemeral() const OVERRIDE;
|
| virtual bool CanCurrentUserLock() const OVERRIDE;
|
| - virtual bool IsUserLoggedIn() const OVERRIDE;
|
| - virtual bool IsLoggedInAsRegularUser() const OVERRIDE;
|
| - virtual bool IsLoggedInAsDemoUser() const OVERRIDE;
|
| - virtual bool IsLoggedInAsPublicAccount() const OVERRIDE;
|
| - virtual bool IsLoggedInAsGuest() const OVERRIDE;
|
| - virtual bool IsLoggedInAsSupervisedUser() const OVERRIDE;
|
| - virtual bool IsLoggedInAsKioskApp() const OVERRIDE;
|
| - virtual bool IsLoggedInAsStub() const OVERRIDE;
|
| - virtual bool IsSessionStarted() const OVERRIDE;
|
| virtual bool IsUserNonCryptohomeDataEphemeral(
|
| const std::string& user_id) const OVERRIDE;
|
| - virtual void AddObserver(UserManager::Observer* obs) OVERRIDE;
|
| - virtual void RemoveObserver(UserManager::Observer* obs) OVERRIDE;
|
| - virtual void AddSessionStateObserver(
|
| - UserManager::UserSessionStateObserver* obs) OVERRIDE;
|
| - virtual void RemoveSessionStateObserver(
|
| - UserManager::UserSessionStateObserver* obs) OVERRIDE;
|
| - virtual void NotifyLocalStateChanged() OVERRIDE;
|
|
|
| virtual UserFlow* GetCurrentUserFlow() const OVERRIDE;
|
| virtual UserFlow* GetUserFlow(const std::string& user_id) const OVERRIDE;
|
| @@ -148,105 +98,56 @@ class UserManagerImpl
|
|
|
| void StopPolicyObserverForTesting();
|
|
|
| + protected:
|
| + // UserManagerBase implementation:
|
| + virtual bool AreEphemeralUsersEnabled() const OVERRIDE;
|
| + virtual const std::string& GetApplicationLocale() const OVERRIDE;
|
| + virtual PrefService* GetLocalState() const OVERRIDE;
|
| + virtual bool IsEnterpriseManaged() const OVERRIDE;
|
| + virtual void LoadPublicAccounts(std::set<std::string>* users_set) OVERRIDE;
|
| + virtual void NotifyOnLogin() OVERRIDE;
|
| + virtual void NotifyUserAddedToSession(const user_manager::User* added_user,
|
| + bool user_switch_pending) OVERRIDE;
|
| + virtual void PerformPreUserListLoadingActions() OVERRIDE;
|
| + virtual void PerformPostUserListLoadingActions() OVERRIDE;
|
| + virtual void PerformPostUserLoggedInActions(bool browser_restart) OVERRIDE;
|
| + virtual void RemoveNonCryptohomeData(const std::string& user_id) OVERRIDE;
|
| + virtual void RemoveUserInternal(const std::string& user_email,
|
| + RemoveUserDelegate* delegate) OVERRIDE;
|
| + virtual bool IsDemoApp(const std::string& user_id) const OVERRIDE;
|
| + virtual bool IsKioskApp(const std::string& user_id) const OVERRIDE;
|
| + virtual bool IsPublicAccountMarkedForRemoval(
|
| + const std::string& user_id) const OVERRIDE;
|
| + virtual void DemoAccountLoggedIn() OVERRIDE;
|
| + virtual void GuestUserLoggedIn() OVERRIDE;
|
| + virtual void KioskAppLoggedIn(const std::string& app_id) OVERRIDE;
|
| + virtual void PublicAccountUserLoggedIn(user_manager::User* user) OVERRIDE;
|
| + virtual void RegularUserLoggedIn(const std::string& user_id) OVERRIDE;
|
| + virtual void RegularUserLoggedInAsEphemeral(
|
| + const std::string& user_id) OVERRIDE;
|
| + virtual void RetailModeUserLoggedIn() OVERRIDE;
|
| + virtual void SupervisedUserLoggedIn(const std::string& user_id) OVERRIDE;
|
| +
|
| private:
|
| friend class SupervisedUserManagerImpl;
|
| friend class UserManager;
|
| - friend class WallpaperManager;
|
| friend class UserManagerTest;
|
| + friend class WallpaperManager;
|
| friend class WallpaperManagerTest;
|
|
|
| - typedef base::hash_map<std::string,
|
| - linked_ptr<UserImageManager> > UserImageManagerMap;
|
| -
|
| - // Stages of loading user list from preferences. Some methods can have
|
| - // different behavior depending on stage.
|
| - enum UserLoadStage {
|
| - STAGE_NOT_LOADED = 0,
|
| - STAGE_LOADING,
|
| - STAGE_LOADED
|
| - };
|
| -
|
| - UserManagerImpl();
|
| + typedef base::hash_map<std::string, linked_ptr<UserImageManager> >
|
| + UserImageManagerMap;
|
|
|
| - // Loads |users_| from Local State if the list has not been loaded yet.
|
| - // Subsequent calls have no effect. Must be called on the UI thread.
|
| - void EnsureUsersLoaded();
|
| + ChromeUserManager();
|
|
|
| // Retrieves trusted device policies and removes users from the persistent
|
| // list if ephemeral users are enabled. Schedules a callback to itself if
|
| // trusted device policies are not yet available.
|
| void RetrieveTrustedDevicePolicies();
|
|
|
| - // Returns true if trusted device policies have successfully been retrieved
|
| - // and ephemeral users are enabled.
|
| - bool AreEphemeralUsersEnabled() const;
|
| -
|
| - // Returns a list of users who have logged into this device previously.
|
| - // Same as GetUsers but used if you need to modify User from that list.
|
| - user_manager::UserList& GetUsersAndModify();
|
| -
|
| - // Returns the user with the given email address if found in the persistent
|
| - // list. Returns |NULL| otherwise.
|
| - const user_manager::User* FindUserInList(const std::string& user_id) const;
|
| -
|
| - // Returns |true| if user with the given id is found in the persistent list.
|
| - // Returns |false| otherwise. Does not trigger user loading.
|
| - const bool UserExistsInList(const std::string& user_id) const;
|
| -
|
| - // Same as FindUserInList but returns non-const pointer to User object.
|
| - user_manager::User* FindUserInListAndModify(const std::string& user_id);
|
| -
|
| - // Indicates that a user just logged in as guest.
|
| - void GuestUserLoggedIn();
|
| -
|
| - // Indicates that a regular user just logged in.
|
| - void RegularUserLoggedIn(const std::string& user_id);
|
| -
|
| - // Indicates that a regular user just logged in as ephemeral.
|
| - void RegularUserLoggedInAsEphemeral(const std::string& user_id);
|
| -
|
| - // Indicates that a supervised user just logged in.
|
| - void SupervisedUserLoggedIn(const std::string& user_id);
|
| -
|
| - // Indicates that a user just logged into a public session.
|
| - void PublicAccountUserLoggedIn(user_manager::User* user);
|
| -
|
| - // Indicates that a kiosk app robot just logged in.
|
| - void KioskAppLoggedIn(const std::string& app_id);
|
| -
|
| - // Indicates that the demo account has just logged in.
|
| - void DemoAccountLoggedIn();
|
| -
|
| - // Indicates that a user just logged into a retail mode session.
|
| - void RetailModeUserLoggedIn();
|
| -
|
| - // Notifies that user has logged in.
|
| - // Sends NOTIFICATION_LOGIN_USER_CHANGED notification.
|
| - void NotifyOnLogin();
|
| -
|
| - // Reads user's oauth token status from local state preferences.
|
| - user_manager::User::OAuthTokenStatus LoadUserOAuthStatus(
|
| - const std::string& user_id) const;
|
| -
|
| - // Read a flag indicating whether online authentication against GAIA should
|
| - // be enforced during the user's next sign-in from local state preferences.
|
| - bool LoadForceOnlineSignin(const std::string& user_id) const;
|
| -
|
| - void SetCurrentUserIsOwner(bool is_current_user_owner);
|
| -
|
| // Updates current user ownership on UI thread.
|
| void UpdateOwnership();
|
|
|
| - // Removes data stored or cached outside the user's cryptohome (wallpaper,
|
| - // avatar, OAuth token status, display name, display email).
|
| - void RemoveNonCryptohomeData(const std::string& user_id);
|
| -
|
| - // Removes a regular or supervised user from the user list.
|
| - // Returns the user if found or NULL otherwise.
|
| - // Also removes the user from the persistent user list.
|
| - user_manager::User* RemoveRegularOrSupervisedUserFromList(
|
| - const std::string& user_id);
|
| -
|
| // If data for a public account is marked as pending removal and the user is
|
| // no longer logged into that account, removes the data.
|
| void CleanUpPublicAccountNonCryptohomeDataPendingRemoval();
|
| @@ -273,135 +174,23 @@ class UserManagerImpl
|
| // Notifies the UI about a change to the user list.
|
| void NotifyUserListChanged();
|
|
|
| - // Notifies observers that merge session state had changed.
|
| - void NotifyMergeSessionStateChanged();
|
| -
|
| - // Notifies observers that active user has changed.
|
| - void NotifyActiveUserChanged(const user_manager::User* active_user);
|
| -
|
| - // Notifies observers that another user was added to the session.
|
| - void NotifyUserAddedToSession(const user_manager::User* added_user);
|
| -
|
| - // Notifies observers that active user_id hash has changed.
|
| - void NotifyActiveUserHashChanged(const std::string& hash);
|
| -
|
| // Lazily creates default user flow.
|
| UserFlow* GetDefaultUserFlow() const;
|
|
|
| - // Update the global LoginState.
|
| - void UpdateLoginState();
|
| -
|
| - // Insert |user| at the front of the LRU user list.
|
| - void SetLRUUser(user_manager::User* user);
|
| -
|
| - // Adds |user| to users list, and adds it to front of LRU list. It is assumed
|
| - // that there is no user with same id.
|
| - void AddUserRecord(user_manager::User* user);
|
| -
|
| - // Sends metrics in response to a regular user logging in.
|
| - void SendRegularUserLoginMetrics(const std::string& user_id);
|
| -
|
| - // Implementation for RemoveUser method. This is an asynchronous part of the
|
| - // method, that verifies that owner will not get deleted, and calls
|
| - // |RemoveNonOwnerUserInternal|.
|
| - void RemoveUserInternal(const std::string& user_email,
|
| - RemoveUserDelegate* delegate);
|
| -
|
| - // Implementation for RemoveUser method. It is synchronous. It is called from
|
| - // RemoveUserInternal after owner check.
|
| - void RemoveNonOwnerUserInternal(const std::string& user_email,
|
| - RemoveUserDelegate* delegate);
|
| -
|
| // MultiProfileUserControllerDelegate implementation:
|
| virtual void OnUserNotAllowed(const std::string& user_email) OVERRIDE;
|
|
|
| - // Sets account locale for user with id |user_id|.
|
| - virtual void UpdateUserAccountLocale(const std::string& user_id,
|
| - const std::string& locale);
|
| -
|
| - // Updates user account after locale was resolved.
|
| - void DoUpdateAccountLocale(const std::string& user_id,
|
| - const std::string& resolved_locale);
|
| -
|
| // Update the number of users.
|
| void UpdateNumberOfUsers();
|
|
|
| - // A wrapper around C++ delete operator. Deletes |user|, and when |user|
|
| - // equals to active_user_, active_user_ is reset to NULL.
|
| - void DeleteUser(user_manager::User* user);
|
| -
|
| // Interface to the signed settings store.
|
| CrosSettings* cros_settings_;
|
|
|
| // Interface to device-local account definitions and associated policy.
|
| policy::DeviceLocalAccountPolicyService* device_local_account_policy_service_;
|
|
|
| - // Indicates stage of loading user from prefs.
|
| - UserLoadStage user_loading_stage_;
|
| -
|
| - // List of all known users. User instances are owned by |this|. Regular users
|
| - // are removed by |RemoveUserFromList|, public accounts by
|
| - // |UpdateAndCleanUpPublicAccounts|.
|
| - user_manager::UserList users_;
|
| -
|
| - // List of all users that are logged in current session. These point to User
|
| - // instances in |users_|. Only one of them could be marked as active.
|
| - user_manager::UserList logged_in_users_;
|
| -
|
| - // A list of all users that are logged in the current session. In contrast to
|
| - // |logged_in_users|, the order of this list is least recently used so that
|
| - // the active user should always be the first one in the list.
|
| - user_manager::UserList lru_logged_in_users_;
|
| -
|
| - // The list which gets reported when the |lru_logged_in_users_| list is empty.
|
| - user_manager::UserList temp_single_logged_in_users_;
|
| -
|
| - // The logged-in user that is currently active in current session.
|
| - // NULL until a user has logged in, then points to one
|
| - // of the User instances in |users_|, the |guest_user_| instance or an
|
| - // ephemeral user instance.
|
| - user_manager::User* active_user_;
|
| -
|
| - // The primary user of the current session. It is recorded for the first
|
| - // signed-in user and does not change thereafter.
|
| - user_manager::User* primary_user_;
|
| -
|
| - // True if SessionStarted() has been called.
|
| - bool session_started_;
|
| -
|
| - // Cached flag of whether currently logged-in user is owner or not.
|
| - // May be accessed on different threads, requires locking.
|
| - bool is_current_user_owner_;
|
| - mutable base::Lock is_current_user_owner_lock_;
|
| -
|
| - // Cached flag of whether the currently logged-in user existed before this
|
| - // login.
|
| - bool is_current_user_new_;
|
| -
|
| - // Cached flag of whether the currently logged-in user is a regular user who
|
| - // logged in as ephemeral. Storage of persistent information is avoided for
|
| - // such users by not adding them to the persistent user list, not downloading
|
| - // their custom avatars and mounting their cryptohomes using tmpfs. Defaults
|
| - // to |false|.
|
| - bool is_current_user_ephemeral_regular_user_;
|
| -
|
| - // Cached flag indicating whether the ephemeral user policy is enabled.
|
| - // Defaults to |false| if the value has not been read from trusted device
|
| - // policy yet.
|
| - bool ephemeral_users_enabled_;
|
| -
|
| - // Cached name of device owner. Defaults to empty string if the value has not
|
| - // been read from trusted device policy yet.
|
| - std::string owner_email_;
|
| -
|
| content::NotificationRegistrar registrar_;
|
|
|
| - ObserverList<UserManager::Observer> observer_list_;
|
| -
|
| - // TODO(nkostylev): Merge with session state refactoring CL.
|
| - ObserverList<UserManager::UserSessionStateObserver>
|
| - session_state_observer_list_;
|
| -
|
| // User avatar managers.
|
| UserImageManagerMap user_image_managers_;
|
|
|
| @@ -420,11 +209,7 @@ class UserManagerImpl
|
| // access.
|
| FlowMap specific_flows_;
|
|
|
| - // Time at which this object was created.
|
| - base::TimeTicks manager_creation_time_;
|
| -
|
| - scoped_ptr<CrosSettings::ObserverSubscription>
|
| - local_accounts_subscription_;
|
| + scoped_ptr<CrosSettings::ObserverSubscription> local_accounts_subscription_;
|
|
|
| scoped_ptr<MultiProfileUserController> multi_profile_user_controller_;
|
|
|
| @@ -435,13 +220,11 @@ class UserManagerImpl
|
| scoped_ptr<policy::CloudExternalDataPolicyObserver>
|
| wallpaper_policy_observer_;
|
|
|
| - // ID of the user just added to the session that needs to be activated
|
| - // as soon as user's profile is loaded.
|
| - std::string pending_user_switch_;
|
| + base::WeakPtrFactory<ChromeUserManager> weak_factory_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(UserManagerImpl);
|
| + DISALLOW_COPY_AND_ASSIGN(ChromeUserManager);
|
| };
|
|
|
| } // namespace chromeos
|
|
|
| -#endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
|
| +#endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
|
|
|