Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Side by Side Diff: chrome/browser/chromeos/login/users/user_manager_impl.h

Issue 398753004: [cros] Move User class to user_manager component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_USERS_USER_MANAGER_IMPL_H_ 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/containers/hash_tables.h" 13 #include "base/containers/hash_tables.h"
14 #include "base/memory/linked_ptr.h" 14 #include "base/memory/linked_ptr.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/observer_list.h" 16 #include "base/observer_list.h"
17 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.h" 19 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.h"
20 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller_dele gate.h" 20 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller_dele gate.h"
21 #include "chrome/browser/chromeos/login/users/user.h"
22 #include "chrome/browser/chromeos/login/users/user_manager.h" 21 #include "chrome/browser/chromeos/login/users/user_manager.h"
23 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" 22 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
24 #include "chrome/browser/chromeos/policy/cloud_external_data_policy_observer.h" 23 #include "chrome/browser/chromeos/policy/cloud_external_data_policy_observer.h"
25 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" 24 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
26 #include "chrome/browser/chromeos/settings/cros_settings.h" 25 #include "chrome/browser/chromeos/settings/cros_settings.h"
27 #include "chrome/browser/chromeos/settings/device_settings_service.h" 26 #include "chrome/browser/chromeos/settings/device_settings_service.h"
27 #include "components/user_manager/user.h"
28 #include "content/public/browser/notification_observer.h" 28 #include "content/public/browser/notification_observer.h"
29 #include "content/public/browser/notification_registrar.h" 29 #include "content/public/browser/notification_registrar.h"
30 30
31 class PrefService; 31 class PrefService;
32 class ProfileSyncService; 32 class ProfileSyncService;
33 33
34 namespace policy { 34 namespace policy {
35 struct DeviceLocalAccount; 35 struct DeviceLocalAccount;
36 } 36 }
37 37
(...skipping 13 matching lines...) Expand all
51 public MultiProfileUserControllerDelegate { 51 public MultiProfileUserControllerDelegate {
52 public: 52 public:
53 virtual ~UserManagerImpl(); 53 virtual ~UserManagerImpl();
54 54
55 // UserManager implementation: 55 // UserManager implementation:
56 virtual void Shutdown() OVERRIDE; 56 virtual void Shutdown() OVERRIDE;
57 virtual MultiProfileUserController* GetMultiProfileUserController() OVERRIDE; 57 virtual MultiProfileUserController* GetMultiProfileUserController() OVERRIDE;
58 virtual UserImageManager* GetUserImageManager( 58 virtual UserImageManager* GetUserImageManager(
59 const std::string& user_id) OVERRIDE; 59 const std::string& user_id) OVERRIDE;
60 virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE; 60 virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE;
61 virtual const UserList& GetUsers() const OVERRIDE; 61 virtual const user_manager::UserList& GetUsers() const OVERRIDE;
62 virtual UserList GetUsersAdmittedForMultiProfile() const OVERRIDE; 62 virtual user_manager::UserList GetUsersAdmittedForMultiProfile()
63 virtual const UserList& GetLoggedInUsers() const OVERRIDE; 63 const OVERRIDE;
64 virtual const UserList& GetLRULoggedInUsers() OVERRIDE; 64 virtual const user_manager::UserList& GetLoggedInUsers() const OVERRIDE;
65 virtual UserList GetUnlockUsers() const OVERRIDE; 65 virtual const user_manager::UserList& GetLRULoggedInUsers() OVERRIDE;
66 virtual user_manager::UserList GetUnlockUsers() const OVERRIDE;
66 virtual const std::string& GetOwnerEmail() OVERRIDE; 67 virtual const std::string& GetOwnerEmail() OVERRIDE;
67 virtual void UserLoggedIn(const std::string& user_id, 68 virtual void UserLoggedIn(const std::string& user_id,
68 const std::string& user_id_hash, 69 const std::string& user_id_hash,
69 bool browser_restart) OVERRIDE; 70 bool browser_restart) OVERRIDE;
70 virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE; 71 virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE;
71 virtual void SessionStarted() OVERRIDE; 72 virtual void SessionStarted() OVERRIDE;
72 virtual void RemoveUser(const std::string& user_id, 73 virtual void RemoveUser(const std::string& user_id,
73 RemoveUserDelegate* delegate) OVERRIDE; 74 RemoveUserDelegate* delegate) OVERRIDE;
74 virtual void RemoveUserFromList(const std::string& user_id) OVERRIDE; 75 virtual void RemoveUserFromList(const std::string& user_id) OVERRIDE;
75 virtual bool IsKnownUser(const std::string& user_id) const OVERRIDE; 76 virtual bool IsKnownUser(const std::string& user_id) const OVERRIDE;
76 virtual const User* FindUser(const std::string& user_id) const OVERRIDE; 77 virtual const user_manager::User* FindUser(
77 virtual User* FindUserAndModify(const std::string& user_id) OVERRIDE; 78 const std::string& user_id) const OVERRIDE;
78 virtual const User* GetLoggedInUser() const OVERRIDE; 79 virtual user_manager::User* FindUserAndModify(
79 virtual User* GetLoggedInUser() OVERRIDE; 80 const std::string& user_id) OVERRIDE;
80 virtual const User* GetActiveUser() const OVERRIDE; 81 virtual const user_manager::User* GetLoggedInUser() const OVERRIDE;
81 virtual User* GetActiveUser() OVERRIDE; 82 virtual user_manager::User* GetLoggedInUser() OVERRIDE;
82 virtual const User* GetPrimaryUser() const OVERRIDE; 83 virtual const user_manager::User* GetActiveUser() const OVERRIDE;
84 virtual user_manager::User* GetActiveUser() OVERRIDE;
85 virtual const user_manager::User* GetPrimaryUser() const OVERRIDE;
83 virtual void SaveUserOAuthStatus( 86 virtual void SaveUserOAuthStatus(
84 const std::string& user_id, 87 const std::string& user_id,
85 User::OAuthTokenStatus oauth_token_status) OVERRIDE; 88 user_manager::User::OAuthTokenStatus oauth_token_status) OVERRIDE;
86 virtual void SaveForceOnlineSignin(const std::string& user_id, 89 virtual void SaveForceOnlineSignin(const std::string& user_id,
87 bool force_online_signin) OVERRIDE; 90 bool force_online_signin) OVERRIDE;
88 virtual void SaveUserDisplayName(const std::string& user_id, 91 virtual void SaveUserDisplayName(const std::string& user_id,
89 const base::string16& display_name) OVERRIDE; 92 const base::string16& display_name) OVERRIDE;
90 virtual base::string16 GetUserDisplayName( 93 virtual base::string16 GetUserDisplayName(
91 const std::string& user_id) const OVERRIDE; 94 const std::string& user_id) const OVERRIDE;
92 virtual void SaveUserDisplayEmail(const std::string& user_id, 95 virtual void SaveUserDisplayEmail(const std::string& user_id,
93 const std::string& display_email) OVERRIDE; 96 const std::string& display_email) OVERRIDE;
94 virtual std::string GetUserDisplayEmail( 97 virtual std::string GetUserDisplayEmail(
95 const std::string& user_id) const OVERRIDE; 98 const std::string& user_id) const OVERRIDE;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 // list if ephemeral users are enabled. Schedules a callback to itself if 176 // list if ephemeral users are enabled. Schedules a callback to itself if
174 // trusted device policies are not yet available. 177 // trusted device policies are not yet available.
175 void RetrieveTrustedDevicePolicies(); 178 void RetrieveTrustedDevicePolicies();
176 179
177 // Returns true if trusted device policies have successfully been retrieved 180 // Returns true if trusted device policies have successfully been retrieved
178 // and ephemeral users are enabled. 181 // and ephemeral users are enabled.
179 bool AreEphemeralUsersEnabled() const; 182 bool AreEphemeralUsersEnabled() const;
180 183
181 // Returns a list of users who have logged into this device previously. 184 // Returns a list of users who have logged into this device previously.
182 // Same as GetUsers but used if you need to modify User from that list. 185 // Same as GetUsers but used if you need to modify User from that list.
183 UserList& GetUsersAndModify(); 186 user_manager::UserList& GetUsersAndModify();
184 187
185 // Returns the user with the given email address if found in the persistent 188 // Returns the user with the given email address if found in the persistent
186 // list. Returns |NULL| otherwise. 189 // list. Returns |NULL| otherwise.
187 const User* FindUserInList(const std::string& user_id) const; 190 const user_manager::User* FindUserInList(const std::string& user_id) const;
188 191
189 // Returns |true| if user with the given id is found in the persistent list. 192 // Returns |true| if user with the given id is found in the persistent list.
190 // Returns |false| otherwise. Does not trigger user loading. 193 // Returns |false| otherwise. Does not trigger user loading.
191 const bool UserExistsInList(const std::string& user_id) const; 194 const bool UserExistsInList(const std::string& user_id) const;
192 195
193 // Same as FindUserInList but returns non-const pointer to User object. 196 // Same as FindUserInList but returns non-const pointer to User object.
194 User* FindUserInListAndModify(const std::string& user_id); 197 user_manager::User* FindUserInListAndModify(const std::string& user_id);
195 198
196 // Indicates that a user just logged in as guest. 199 // Indicates that a user just logged in as guest.
197 void GuestUserLoggedIn(); 200 void GuestUserLoggedIn();
198 201
199 // Indicates that a regular user just logged in. 202 // Indicates that a regular user just logged in.
200 void RegularUserLoggedIn(const std::string& user_id); 203 void RegularUserLoggedIn(const std::string& user_id);
201 204
202 // Indicates that a regular user just logged in as ephemeral. 205 // Indicates that a regular user just logged in as ephemeral.
203 void RegularUserLoggedInAsEphemeral(const std::string& user_id); 206 void RegularUserLoggedInAsEphemeral(const std::string& user_id);
204 207
205 // Indicates that a supervised user just logged in. 208 // Indicates that a supervised user just logged in.
206 void SupervisedUserLoggedIn(const std::string& user_id); 209 void SupervisedUserLoggedIn(const std::string& user_id);
207 210
208 // Indicates that a user just logged into a public session. 211 // Indicates that a user just logged into a public session.
209 void PublicAccountUserLoggedIn(User* user); 212 void PublicAccountUserLoggedIn(user_manager::User* user);
210 213
211 // Indicates that a kiosk app robot just logged in. 214 // Indicates that a kiosk app robot just logged in.
212 void KioskAppLoggedIn(const std::string& app_id); 215 void KioskAppLoggedIn(const std::string& app_id);
213 216
214 // Indicates that the demo account has just logged in. 217 // Indicates that the demo account has just logged in.
215 void DemoAccountLoggedIn(); 218 void DemoAccountLoggedIn();
216 219
217 // Indicates that a user just logged into a retail mode session. 220 // Indicates that a user just logged into a retail mode session.
218 void RetailModeUserLoggedIn(); 221 void RetailModeUserLoggedIn();
219 222
220 // Notifies that user has logged in. 223 // Notifies that user has logged in.
221 // Sends NOTIFICATION_LOGIN_USER_CHANGED notification. 224 // Sends NOTIFICATION_LOGIN_USER_CHANGED notification.
222 void NotifyOnLogin(); 225 void NotifyOnLogin();
223 226
224 // Reads user's oauth token status from local state preferences. 227 // Reads user's oauth token status from local state preferences.
225 User::OAuthTokenStatus LoadUserOAuthStatus(const std::string& user_id) const; 228 user_manager::User::OAuthTokenStatus LoadUserOAuthStatus(
229 const std::string& user_id) const;
226 230
227 // Read a flag indicating whether online authentication against GAIA should 231 // Read a flag indicating whether online authentication against GAIA should
228 // be enforced during the user's next sign-in from local state preferences. 232 // be enforced during the user's next sign-in from local state preferences.
229 bool LoadForceOnlineSignin(const std::string& user_id) const; 233 bool LoadForceOnlineSignin(const std::string& user_id) const;
230 234
231 void SetCurrentUserIsOwner(bool is_current_user_owner); 235 void SetCurrentUserIsOwner(bool is_current_user_owner);
232 236
233 // Updates current user ownership on UI thread. 237 // Updates current user ownership on UI thread.
234 void UpdateOwnership(); 238 void UpdateOwnership();
235 239
236 // Removes data stored or cached outside the user's cryptohome (wallpaper, 240 // Removes data stored or cached outside the user's cryptohome (wallpaper,
237 // avatar, OAuth token status, display name, display email). 241 // avatar, OAuth token status, display name, display email).
238 void RemoveNonCryptohomeData(const std::string& user_id); 242 void RemoveNonCryptohomeData(const std::string& user_id);
239 243
240 // Removes a regular or supervised user from the user list. 244 // Removes a regular or supervised user from the user list.
241 // Returns the user if found or NULL otherwise. 245 // Returns the user if found or NULL otherwise.
242 // Also removes the user from the persistent user list. 246 // Also removes the user from the persistent user list.
243 User* RemoveRegularOrSupervisedUserFromList(const std::string& user_id); 247 user_manager::User* RemoveRegularOrSupervisedUserFromList(
248 const std::string& user_id);
244 249
245 // If data for a public account is marked as pending removal and the user is 250 // If data for a public account is marked as pending removal and the user is
246 // no longer logged into that account, removes the data. 251 // no longer logged into that account, removes the data.
247 void CleanUpPublicAccountNonCryptohomeDataPendingRemoval(); 252 void CleanUpPublicAccountNonCryptohomeDataPendingRemoval();
248 253
249 // Removes data belonging to public accounts that are no longer found on the 254 // Removes data belonging to public accounts that are no longer found on the
250 // user list. If the user is currently logged into one of these accounts, the 255 // user list. If the user is currently logged into one of these accounts, the
251 // data for that account is not removed immediately but marked as pending 256 // data for that account is not removed immediately but marked as pending
252 // removal after logout. 257 // removal after logout.
253 void CleanUpPublicAccountNonCryptohomeData( 258 void CleanUpPublicAccountNonCryptohomeData(
(...skipping 11 matching lines...) Expand all
265 // associated with that username. 270 // associated with that username.
266 void UpdatePublicAccountDisplayName(const std::string& user_id); 271 void UpdatePublicAccountDisplayName(const std::string& user_id);
267 272
268 // Notifies the UI about a change to the user list. 273 // Notifies the UI about a change to the user list.
269 void NotifyUserListChanged(); 274 void NotifyUserListChanged();
270 275
271 // Notifies observers that merge session state had changed. 276 // Notifies observers that merge session state had changed.
272 void NotifyMergeSessionStateChanged(); 277 void NotifyMergeSessionStateChanged();
273 278
274 // Notifies observers that active user has changed. 279 // Notifies observers that active user has changed.
275 void NotifyActiveUserChanged(const User* active_user); 280 void NotifyActiveUserChanged(const user_manager::User* active_user);
276 281
277 // Notifies observers that another user was added to the session. 282 // Notifies observers that another user was added to the session.
278 void NotifyUserAddedToSession(const User* added_user); 283 void NotifyUserAddedToSession(const user_manager::User* added_user);
279 284
280 // Notifies observers that active user_id hash has changed. 285 // Notifies observers that active user_id hash has changed.
281 void NotifyActiveUserHashChanged(const std::string& hash); 286 void NotifyActiveUserHashChanged(const std::string& hash);
282 287
283 // Lazily creates default user flow. 288 // Lazily creates default user flow.
284 UserFlow* GetDefaultUserFlow() const; 289 UserFlow* GetDefaultUserFlow() const;
285 290
286 // Update the global LoginState. 291 // Update the global LoginState.
287 void UpdateLoginState(); 292 void UpdateLoginState();
288 293
289 // Insert |user| at the front of the LRU user list. 294 // Insert |user| at the front of the LRU user list.
290 void SetLRUUser(User* user); 295 void SetLRUUser(user_manager::User* user);
291 296
292 // Adds |user| to users list, and adds it to front of LRU list. It is assumed 297 // Adds |user| to users list, and adds it to front of LRU list. It is assumed
293 // that there is no user with same id. 298 // that there is no user with same id.
294 void AddUserRecord(User* user); 299 void AddUserRecord(user_manager::User* user);
295 300
296 // Sends metrics in response to a regular user logging in. 301 // Sends metrics in response to a regular user logging in.
297 void SendRegularUserLoginMetrics(const std::string& user_id); 302 void SendRegularUserLoginMetrics(const std::string& user_id);
298 303
299 // Implementation for RemoveUser method. This is an asynchronous part of the 304 // Implementation for RemoveUser method. This is an asynchronous part of the
300 // method, that verifies that owner will not get deleted, and calls 305 // method, that verifies that owner will not get deleted, and calls
301 // |RemoveNonOwnerUserInternal|. 306 // |RemoveNonOwnerUserInternal|.
302 void RemoveUserInternal(const std::string& user_email, 307 void RemoveUserInternal(const std::string& user_email,
303 RemoveUserDelegate* delegate); 308 RemoveUserDelegate* delegate);
304 309
(...skipping 11 matching lines...) Expand all
316 321
317 // Updates user account after locale was resolved. 322 // Updates user account after locale was resolved.
318 void DoUpdateAccountLocale(const std::string& user_id, 323 void DoUpdateAccountLocale(const std::string& user_id,
319 const std::string& resolved_locale); 324 const std::string& resolved_locale);
320 325
321 // Update the number of users. 326 // Update the number of users.
322 void UpdateNumberOfUsers(); 327 void UpdateNumberOfUsers();
323 328
324 // A wrapper around C++ delete operator. Deletes |user|, and when |user| 329 // A wrapper around C++ delete operator. Deletes |user|, and when |user|
325 // equals to active_user_, active_user_ is reset to NULL. 330 // equals to active_user_, active_user_ is reset to NULL.
326 void DeleteUser(User* user); 331 void DeleteUser(user_manager::User* user);
327 332
328 // Interface to the signed settings store. 333 // Interface to the signed settings store.
329 CrosSettings* cros_settings_; 334 CrosSettings* cros_settings_;
330 335
331 // Interface to device-local account definitions and associated policy. 336 // Interface to device-local account definitions and associated policy.
332 policy::DeviceLocalAccountPolicyService* device_local_account_policy_service_; 337 policy::DeviceLocalAccountPolicyService* device_local_account_policy_service_;
333 338
334 // Indicates stage of loading user from prefs. 339 // Indicates stage of loading user from prefs.
335 UserLoadStage user_loading_stage_; 340 UserLoadStage user_loading_stage_;
336 341
337 // List of all known users. User instances are owned by |this|. Regular users 342 // List of all known users. User instances are owned by |this|. Regular users
338 // are removed by |RemoveUserFromList|, public accounts by 343 // are removed by |RemoveUserFromList|, public accounts by
339 // |UpdateAndCleanUpPublicAccounts|. 344 // |UpdateAndCleanUpPublicAccounts|.
340 UserList users_; 345 user_manager::UserList users_;
341 346
342 // List of all users that are logged in current session. These point to User 347 // List of all users that are logged in current session. These point to User
343 // instances in |users_|. Only one of them could be marked as active. 348 // instances in |users_|. Only one of them could be marked as active.
344 UserList logged_in_users_; 349 user_manager::UserList logged_in_users_;
345 350
346 // A list of all users that are logged in the current session. In contrast to 351 // A list of all users that are logged in the current session. In contrast to
347 // |logged_in_users|, the order of this list is least recently used so that 352 // |logged_in_users|, the order of this list is least recently used so that
348 // the active user should always be the first one in the list. 353 // the active user should always be the first one in the list.
349 UserList lru_logged_in_users_; 354 user_manager::UserList lru_logged_in_users_;
350 355
351 // The list which gets reported when the |lru_logged_in_users_| list is empty. 356 // The list which gets reported when the |lru_logged_in_users_| list is empty.
352 UserList temp_single_logged_in_users_; 357 user_manager::UserList temp_single_logged_in_users_;
353 358
354 // The logged-in user that is currently active in current session. 359 // The logged-in user that is currently active in current session.
355 // NULL until a user has logged in, then points to one 360 // NULL until a user has logged in, then points to one
356 // of the User instances in |users_|, the |guest_user_| instance or an 361 // of the User instances in |users_|, the |guest_user_| instance or an
357 // ephemeral user instance. 362 // ephemeral user instance.
358 User* active_user_; 363 user_manager::User* active_user_;
359 364
360 // The primary user of the current session. It is recorded for the first 365 // The primary user of the current session. It is recorded for the first
361 // signed-in user and does not change thereafter. 366 // signed-in user and does not change thereafter.
362 User* primary_user_; 367 user_manager::User* primary_user_;
363 368
364 // True if SessionStarted() has been called. 369 // True if SessionStarted() has been called.
365 bool session_started_; 370 bool session_started_;
366 371
367 // Cached flag of whether currently logged-in user is owner or not. 372 // Cached flag of whether currently logged-in user is owner or not.
368 // May be accessed on different threads, requires locking. 373 // May be accessed on different threads, requires locking.
369 bool is_current_user_owner_; 374 bool is_current_user_owner_;
370 mutable base::Lock is_current_user_owner_lock_; 375 mutable base::Lock is_current_user_owner_lock_;
371 376
372 // Cached flag of whether the currently logged-in user existed before this 377 // Cached flag of whether the currently logged-in user existed before this
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 // ID of the user just added to the session that needs to be activated 438 // ID of the user just added to the session that needs to be activated
434 // as soon as user's profile is loaded. 439 // as soon as user's profile is loaded.
435 std::string pending_user_switch_; 440 std::string pending_user_switch_;
436 441
437 DISALLOW_COPY_AND_ASSIGN(UserManagerImpl); 442 DISALLOW_COPY_AND_ASSIGN(UserManagerImpl);
438 }; 443 };
439 444
440 } // namespace chromeos 445 } // namespace chromeos
441 446
442 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_ 447 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_USER_MANAGER_IMPL_H_
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/users/user_manager.cc ('k') | chrome/browser/chromeos/login/users/user_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698