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