chrome_user_manager.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <map>
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string>
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <vector>
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/basictypes.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/containers/hash_tables.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/linked_ptr.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/weak_ptr.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/observer_list.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/synchronization/lock.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/time/time.h"
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.h"
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/users/multi_profile_user_controller_delegate.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager_base.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/cloud_external_data_policy_observer.h"
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h"
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_observer.h"
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/notification_registrar.h"
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class PrefService;
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ProfileSyncService;
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace policy {
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)struct DeviceLocalAccount;
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace chromeos {
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MultiProfileUserController;
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class RemoveUserDelegate;
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUserManagerImpl;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SessionLengthLimiter;
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Chrome specific implementation of the UserManager.
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ChromeUserManager
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : public UserManagerBase,
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      public content::NotificationObserver,
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      public policy::CloudExternalDataPolicyObserver::Delegate,
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      public policy::DeviceLocalAccountPolicyService::Observer,
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      public MultiProfileUserControllerDelegate {
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~ChromeUserManager();
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // UserManager implementation:
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Shutdown() OVERRIDE;
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual MultiProfileUserController* GetMultiProfileUserController() OVERRIDE;
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserImageManager* GetUserImageManager(
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& user_id) OVERRIDE;
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE;
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual user_manager::UserList GetUsersAdmittedForMultiProfile()
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const OVERRIDE;
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual user_manager::UserList GetUnlockUsers() const OVERRIDE;
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SessionStarted() OVERRIDE;
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SaveUserOAuthStatus(
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& user_id,
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      user_manager::User::OAuthTokenStatus oauth_token_status) OVERRIDE;
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SaveUserDisplayName(const std::string& user_id,
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   const base::string16& display_name) OVERRIDE;
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool CanCurrentUserLock() const OVERRIDE;
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool IsUserNonCryptohomeDataEphemeral(
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& user_id) const OVERRIDE;
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserFlow* GetCurrentUserFlow() const OVERRIDE;
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserFlow* GetUserFlow(const std::string& user_id) const OVERRIDE;
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SetUserFlow(const std::string& user_id, UserFlow* flow) OVERRIDE;
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ResetUserFlow(const std::string& user_id) OVERRIDE;
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool AreSupervisedUsersAllowed() const OVERRIDE;
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // content::NotificationObserver implementation.
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Observe(int type,
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       const content::NotificationSource& source,
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // policy::CloudExternalDataPolicyObserver::Delegate:
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnExternalDataSet(const std::string& policy,
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                 const std::string& user_id) OVERRIDE;
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnExternalDataCleared(const std::string& policy,
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                     const std::string& user_id) OVERRIDE;
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnExternalDataFetched(const std::string& policy,
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                     const std::string& user_id,
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                     scoped_ptr<std::string> data) OVERRIDE;
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // policy::DeviceLocalAccountPolicyService::Observer implementation.
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnPolicyUpdated(const std::string& user_id) OVERRIDE;
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnDeviceLocalAccountsChanged() OVERRIDE;
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void StopPolicyObserverForTesting();
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // UserManagerBase implementation:
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool AreEphemeralUsersEnabled() const OVERRIDE;
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual const std::string& GetApplicationLocale() const OVERRIDE;
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual PrefService* GetLocalState() const OVERRIDE;
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool IsEnterpriseManaged() const OVERRIDE;
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void LoadPublicAccounts(std::set<std::string>* users_set) OVERRIDE;
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void NotifyOnLogin() OVERRIDE;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void NotifyUserAddedToSession(const user_manager::User* added_user,
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        bool user_switch_pending) OVERRIDE;
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void PerformPreUserListLoadingActions() OVERRIDE;
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void PerformPostUserListLoadingActions() OVERRIDE;
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void PerformPostUserLoggedInActions(bool browser_restart) OVERRIDE;
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RemoveNonCryptohomeData(const std::string& user_id) OVERRIDE;
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RemoveUserInternal(const std::string& user_email,
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                  RemoveUserDelegate* delegate) OVERRIDE;
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool IsDemoApp(const std::string& user_id) const OVERRIDE;
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool IsKioskApp(const std::string& user_id) const OVERRIDE;
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool IsPublicAccountMarkedForRemoval(
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& user_id) const OVERRIDE;
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DemoAccountLoggedIn() OVERRIDE;
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void GuestUserLoggedIn() OVERRIDE;
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void KioskAppLoggedIn(const std::string& app_id) OVERRIDE;
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void PublicAccountUserLoggedIn(user_manager::User* user) OVERRIDE;
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RegularUserLoggedIn(const std::string& user_id) OVERRIDE;
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RegularUserLoggedInAsEphemeral(
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& user_id) OVERRIDE;
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RetailModeUserLoggedIn() OVERRIDE;
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void SupervisedUserLoggedIn(const std::string& user_id) OVERRIDE;
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class SupervisedUserManagerImpl;
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class UserManager;
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class UserManagerTest;
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class WallpaperManager;
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class WallpaperManagerTest;
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  typedef base::hash_map<std::string, linked_ptr<UserImageManager> >
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      UserImageManagerMap;
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ChromeUserManager();
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Retrieves trusted device policies and removes users from the persistent
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // list if ephemeral users are enabled. Schedules a callback to itself if
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // trusted device policies are not yet available.
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void RetrieveTrustedDevicePolicies();
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Updates current user ownership on UI thread.
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void UpdateOwnership();
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // If data for a public account is marked as pending removal and the user is
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // no longer logged into that account, removes the data.
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void CleanUpPublicAccountNonCryptohomeDataPendingRemoval();
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Removes data belonging to public accounts that are no longer found on the
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // user list. If the user is currently logged into one of these accounts, the
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // data for that account is not removed immediately but marked as pending
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // removal after logout.
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void CleanUpPublicAccountNonCryptohomeData(
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::vector<std::string>& old_public_accounts);
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Replaces the list of public accounts with those found in
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // |device_local_accounts|. Ensures that data belonging to accounts no longer
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // on the list is removed. Returns |true| if the list has changed.
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Public accounts are defined by policy. This method is called whenever an
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // updated list of public accounts is received from policy.
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool UpdateAndCleanUpPublicAccounts(
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::vector<policy::DeviceLocalAccount>& device_local_accounts);
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Updates the display name for public account |username| from policy settings
1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // associated with that username.
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void UpdatePublicAccountDisplayName(const std::string& user_id);
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Notifies the UI about a change to the user list.
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void NotifyUserListChanged();
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Lazily creates default user flow.
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  UserFlow* GetDefaultUserFlow() const;
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // MultiProfileUserControllerDelegate implementation:
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnUserNotAllowed(const std::string& user_email) OVERRIDE;
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Update the number of users.
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void UpdateNumberOfUsers();
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Interface to the signed settings store.
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CrosSettings* cros_settings_;
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Interface to device-local account definitions and associated policy.
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  policy::DeviceLocalAccountPolicyService* device_local_account_policy_service_;
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content::NotificationRegistrar registrar_;
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // User avatar managers.
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  UserImageManagerMap user_image_managers_;
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Supervised user manager.
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<SupervisedUserManagerImpl> supervised_user_manager_;
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Session length limiter.
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<SessionLengthLimiter> session_length_limiter_;
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  typedef std::map<std::string, UserFlow*> FlowMap;
2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Lazy-initialized default flow.
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable scoped_ptr<UserFlow> default_flow_;
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Specific flows by user e-mail. Keys should be canonicalized before
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // access.
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  FlowMap specific_flows_;
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<CrosSettings::ObserverSubscription> local_accounts_subscription_;
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<MultiProfileUserController> multi_profile_user_controller_;
2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Observer for the policy that can be used to manage user images.
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<policy::CloudExternalDataPolicyObserver> avatar_policy_observer_;
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Observer for the policy that can be used to manage wallpapers.
2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<policy::CloudExternalDataPolicyObserver>
2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      wallpaper_policy_observer_;
2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::WeakPtrFactory<ChromeUserManager> weak_factory_;
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeUserManager);
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace chromeos
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
231