OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ |
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ | 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 int image_index) OVERRIDE; | 64 int image_index) OVERRIDE; |
65 virtual void SaveUserImage(const std::string& username, | 65 virtual void SaveUserImage(const std::string& username, |
66 const SkBitmap& image) OVERRIDE; | 66 const SkBitmap& image) OVERRIDE; |
67 virtual void SaveUserImageFromFile(const std::string& username, | 67 virtual void SaveUserImageFromFile(const std::string& username, |
68 const FilePath& path) OVERRIDE; | 68 const FilePath& path) OVERRIDE; |
69 virtual void SaveUserImageFromProfileImage( | 69 virtual void SaveUserImageFromProfileImage( |
70 const std::string& username) OVERRIDE; | 70 const std::string& username) OVERRIDE; |
71 virtual void DownloadProfileImage(const std::string& reason) OVERRIDE; | 71 virtual void DownloadProfileImage(const std::string& reason) OVERRIDE; |
72 virtual bool IsCurrentUserOwner() const OVERRIDE; | 72 virtual bool IsCurrentUserOwner() const OVERRIDE; |
73 virtual bool IsCurrentUserNew() const OVERRIDE; | 73 virtual bool IsCurrentUserNew() const OVERRIDE; |
| 74 virtual bool IsCurrentUserEphemeral() const OVERRIDE; |
74 virtual bool IsUserLoggedIn() const OVERRIDE; | 75 virtual bool IsUserLoggedIn() const OVERRIDE; |
75 virtual bool IsLoggedInAsDemoUser() const OVERRIDE; | 76 virtual bool IsLoggedInAsDemoUser() const OVERRIDE; |
76 virtual bool IsLoggedInAsGuest() const OVERRIDE; | 77 virtual bool IsLoggedInAsGuest() const OVERRIDE; |
77 virtual void AddObserver(Observer* obs) OVERRIDE; | 78 virtual void AddObserver(Observer* obs) OVERRIDE; |
78 virtual void RemoveObserver(Observer* obs) OVERRIDE; | 79 virtual void RemoveObserver(Observer* obs) OVERRIDE; |
79 virtual void NotifyLocalStateChanged() OVERRIDE; | 80 virtual void NotifyLocalStateChanged() OVERRIDE; |
80 virtual const SkBitmap& DownloadedProfileImage() const OVERRIDE; | 81 virtual const SkBitmap& DownloadedProfileImage() const OVERRIDE; |
81 | 82 |
82 // content::NotificationObserver implementation. | 83 // content::NotificationObserver implementation. |
83 virtual void Observe(int type, | 84 virtual void Observe(int type, |
84 const content::NotificationSource& source, | 85 const content::NotificationSource& source, |
85 const content::NotificationDetails& details) OVERRIDE; | 86 const content::NotificationDetails& details) OVERRIDE; |
86 | 87 |
87 // ProfileSyncServiceObserver implementation. | 88 // ProfileSyncServiceObserver implementation. |
88 virtual void OnStateChanged() OVERRIDE; | 89 virtual void OnStateChanged() OVERRIDE; |
89 | 90 |
90 protected: | 91 protected: |
91 UserManagerImpl(); | 92 UserManagerImpl(); |
92 virtual ~UserManagerImpl(); | 93 virtual ~UserManagerImpl(); |
93 | 94 |
94 // Returns image filepath for the given user. | 95 // Returns image filepath for the given user. |
95 FilePath GetImagePathForUser(const std::string& username); | 96 FilePath GetImagePathForUser(const std::string& username); |
96 | 97 |
97 private: | 98 private: |
98 friend class UserManagerImplWrapper; | 99 friend class UserManagerImplWrapper; |
| 100 friend class UserManagerTest; |
99 | 101 |
100 // Loads |users_| from Local State if the list has not been loaded yet. | 102 // Loads |users_| from Local State if the list has not been loaded yet. |
101 // Subsequent calls have no effect. Must be called on the UI thread. | 103 // Subsequent calls have no effect. Must be called on the UI thread. |
102 void EnsureUsersLoaded(); | 104 void EnsureUsersLoaded(); |
103 | 105 |
| 106 // Retrieves trusted device policies and removes users from the persistent |
| 107 // list if ephemeral users are enabled. Schedules a callback to itself if |
| 108 // trusted device policies are not yet available. |
| 109 void RetrieveTrustedDevicePolicies(); |
| 110 |
| 111 // Returns true if trusted device policies have successfully been retrieved |
| 112 // and ephemeral users are enabled. |
| 113 bool AreEphemeralUsersEnabled() const; |
| 114 |
| 115 // Returns true if the user with the given email address is to be treated as |
| 116 // ephemeral. |
| 117 bool IsEphemeralUser(const std::string& email) const; |
| 118 |
| 119 // Returns the user with the given email address if found in the persistent |
| 120 // list. Returns |NULL| otherwise. |
| 121 const User* FindUserInList(const std::string& email) const; |
| 122 |
104 // Makes stub user the current logged-in user (for test paths). | 123 // Makes stub user the current logged-in user (for test paths). |
105 void StubUserLoggedIn(); | 124 void StubUserLoggedIn(); |
106 | 125 |
107 // Notifies on new user session. | 126 // Notifies on new user session. |
108 void NotifyOnLogin(); | 127 void NotifyOnLogin(); |
109 | 128 |
110 // Reads user's oauth token status from local state preferences. | 129 // Reads user's oauth token status from local state preferences. |
111 User::OAuthTokenStatus LoadUserOAuthStatus(const std::string& username) const; | 130 User::OAuthTokenStatus LoadUserOAuthStatus(const std::string& username) const; |
112 | 131 |
113 void SetCurrentUserIsOwner(bool is_current_user_owner); | 132 void SetCurrentUserIsOwner(bool is_current_user_owner); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 // ProfileDownloaderDelegate implementation. | 181 // ProfileDownloaderDelegate implementation. |
163 virtual int GetDesiredImageSideLength() const OVERRIDE; | 182 virtual int GetDesiredImageSideLength() const OVERRIDE; |
164 virtual Profile* GetBrowserProfile() OVERRIDE; | 183 virtual Profile* GetBrowserProfile() OVERRIDE; |
165 virtual std::string GetCachedPictureURL() const OVERRIDE; | 184 virtual std::string GetCachedPictureURL() const OVERRIDE; |
166 virtual void OnDownloadComplete(ProfileDownloader* downloader, | 185 virtual void OnDownloadComplete(ProfileDownloader* downloader, |
167 bool success) OVERRIDE; | 186 bool success) OVERRIDE; |
168 | 187 |
169 // Creates a new User instance. | 188 // Creates a new User instance. |
170 User* CreateUser(const std::string& email) const; | 189 User* CreateUser(const std::string& email) const; |
171 | 190 |
| 191 // Removes the user from the persistent list only. Also removes the user's |
| 192 // picture. |
| 193 void RemoveUserFromListInternal(const std::string& email); |
| 194 |
172 // Loads user image from its file. | 195 // Loads user image from its file. |
173 scoped_refptr<UserImageLoader> image_loader_; | 196 scoped_refptr<UserImageLoader> image_loader_; |
174 | 197 |
175 // List of all known users. User instances are owned by |this| and deleted | 198 // List of all known users. User instances are owned by |this| and deleted |
176 // when a user is removed with |RemoveUser|. | 199 // when users are removed by |RemoveUserFromListInternal|. |
177 mutable UserList users_; | 200 mutable UserList users_; |
178 | 201 |
179 // Map of users' display names used to determine which users have unique | 202 // Map of users' display names used to determine which users have unique |
180 // display names. | 203 // display names. |
181 mutable base::hash_map<std::string, size_t> display_name_count_; | 204 mutable base::hash_map<std::string, size_t> display_name_count_; |
182 | 205 |
183 // User instance used to represent the demo user. | 206 // User instance used to represent the demo user. |
184 User demo_user_; | 207 User demo_user_; |
185 | 208 |
186 // User instance used to represent the off-the-record (guest) user. | 209 // User instance used to represent the off-the-record (guest) user. |
187 User guest_user_; | 210 User guest_user_; |
188 | 211 |
189 // A stub User instance for test paths (running without a logged-in user). | 212 // A stub User instance for test paths (running without a logged-in user). |
190 User stub_user_; | 213 User stub_user_; |
191 | 214 |
192 // The logged-in user. NULL until a user has logged in, then points to one | 215 // The logged-in user. NULL until a user has logged in, then points to one |
193 // of the User instances in |users_| or to the |guest_user_| instance. | 216 // of the User instances in |users_|, the |guest_user_| instance or an |
194 // In test paths without login points to the |stub_user_| instance. | 217 // ephemeral user instance. In test paths without login points to the |
| 218 // |stub_user_| instance. |
195 User* logged_in_user_; | 219 User* logged_in_user_; |
196 | 220 |
197 // Cached flag of whether currently logged-in user is owner or not. | 221 // Cached flag of whether currently logged-in user is owner or not. |
198 // May be accessed on different threads, requires locking. | 222 // May be accessed on different threads, requires locking. |
199 bool is_current_user_owner_; | 223 bool is_current_user_owner_; |
200 mutable base::Lock is_current_user_owner_lock_; | 224 mutable base::Lock is_current_user_owner_lock_; |
201 | 225 |
202 // Cached flag of whether the currently logged-in user existed before this | 226 // Cached flag of whether the currently logged-in user existed before this |
203 // login. | 227 // login. |
204 bool is_current_user_new_; | 228 bool is_current_user_new_; |
205 | 229 |
| 230 // Cached flag of whether the currently logged-in user is ephemeral. Storage |
| 231 // of persistent information is avoided for such users by not adding them to |
| 232 // the user list in local state, not downloading their custom user images and |
| 233 // mounting their cryptohomes using tmpfs. |
| 234 bool is_current_user_ephemeral_; |
| 235 |
206 // Cached flag of whether any user is logged in at the moment. | 236 // Cached flag of whether any user is logged in at the moment. |
207 bool is_user_logged_in_; | 237 bool is_user_logged_in_; |
208 | 238 |
| 239 // Cached flag indicating whether ephemeral users are enabled. Defaults to |
| 240 // |false| if the value has not been read from trusted device policy yet. |
| 241 bool ephemeral_users_enabled_; |
| 242 |
| 243 // Cached name of device owner. Defaults to empty string if the value has not |
| 244 // been read from trusted device policy yet. |
| 245 std::string owner_email_; |
| 246 |
209 content::NotificationRegistrar registrar_; | 247 content::NotificationRegistrar registrar_; |
210 | 248 |
211 // Profile sync service which is observed to take actions after sync | 249 // Profile sync service which is observed to take actions after sync |
212 // errors appear. NOTE: there is no guarantee that it is the current sync | 250 // errors appear. NOTE: there is no guarantee that it is the current sync |
213 // service, so do NOT use it outside |OnStateChanged| method. | 251 // service, so do NOT use it outside |OnStateChanged| method. |
214 ProfileSyncService* observed_sync_service_; | 252 ProfileSyncService* observed_sync_service_; |
215 | 253 |
216 ObserverList<Observer> observer_list_; | 254 ObserverList<Observer> observer_list_; |
217 | 255 |
218 // Download user profile image on login to update it if it's changed. | 256 // Download user profile image on login to update it if it's changed. |
(...skipping 15 matching lines...) Expand all Loading... |
234 | 272 |
235 // Data URL for |downloaded_profile_image_|. | 273 // Data URL for |downloaded_profile_image_|. |
236 std::string downloaded_profile_image_data_url_; | 274 std::string downloaded_profile_image_data_url_; |
237 | 275 |
238 DISALLOW_COPY_AND_ASSIGN(UserManagerImpl); | 276 DISALLOW_COPY_AND_ASSIGN(UserManagerImpl); |
239 }; | 277 }; |
240 | 278 |
241 } // namespace chromeos | 279 } // namespace chromeos |
242 | 280 |
243 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ | 281 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USER_MANAGER_IMPL_H_ |
OLD | NEW |