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

Side by Side Diff: components/user_manager/user_manager_base.cc

Issue 444903002: [cros] user_manager component - move UserManagerBase and UserManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: similarity Created 6 years, 4 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 #include "chrome/browser/chromeos/login/users/user_manager_base.h" 5 #include "components/user_manager/user_manager_base.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/format_macros.h" 14 #include "base/format_macros.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
17 #include "base/prefs/pref_registry_simple.h" 17 #include "base/prefs/pref_registry_simple.h"
18 #include "base/prefs/pref_service.h" 18 #include "base/prefs/pref_service.h"
19 #include "base/prefs/scoped_user_pref_update.h" 19 #include "base/prefs/scoped_user_pref_update.h"
20 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
21 #include "base/strings/stringprintf.h" 21 #include "base/strings/stringprintf.h"
22 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
23 #include "base/values.h" 23 #include "base/values.h"
24 #include "chrome/browser/chromeos/login/users/remove_user_delegate.h"
25 #include "chromeos/chromeos_switches.h" 24 #include "chromeos/chromeos_switches.h"
26 #include "chromeos/cryptohome/async_method_caller.h" 25 #include "chromeos/cryptohome/async_method_caller.h"
27 #include "chromeos/login/login_state.h" 26 #include "chromeos/login/login_state.h"
28 #include "chromeos/login/user_names.h" 27 #include "chromeos/login/user_names.h"
29 #include "components/session_manager/core/session_manager.h" 28 #include "components/session_manager/core/session_manager.h"
29 #include "components/user_manager/remove_user_delegate.h"
30 #include "components/user_manager/user_type.h" 30 #include "components/user_manager/user_type.h"
31 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
32 #include "google_apis/gaia/gaia_auth_util.h" 32 #include "google_apis/gaia/gaia_auth_util.h"
33 #include "ui/base/l10n/l10n_util.h" 33 #include "ui/base/l10n/l10n_util.h"
34 34
35 using content::BrowserThread; 35 using content::BrowserThread;
36 36
37 namespace chromeos { 37 namespace user_manager {
38 namespace { 38 namespace {
39 39
40 // A vector pref of the the regular users known on this device, arranged in LRU 40 // A vector pref of the the regular users known on this device, arranged in LRU
41 // order. 41 // order.
42 const char kRegularUsers[] = "LoggedInUsers"; 42 const char kRegularUsers[] = "LoggedInUsers";
43 43
44 // A dictionary that maps user IDs to the displayed name. 44 // A dictionary that maps user IDs to the displayed name.
45 const char kUserDisplayName[] = "UserDisplayName"; 45 const char kUserDisplayName[] = "UserDisplayName";
46 46
47 // A dictionary that maps user IDs to the user's given name. 47 // A dictionary that maps user IDs to the user's given name.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 : active_user_(NULL), 108 : active_user_(NULL),
109 primary_user_(NULL), 109 primary_user_(NULL),
110 user_loading_stage_(STAGE_NOT_LOADED), 110 user_loading_stage_(STAGE_NOT_LOADED),
111 session_started_(false), 111 session_started_(false),
112 is_current_user_owner_(false), 112 is_current_user_owner_(false),
113 is_current_user_new_(false), 113 is_current_user_new_(false),
114 is_current_user_ephemeral_regular_user_(false), 114 is_current_user_ephemeral_regular_user_(false),
115 ephemeral_users_enabled_(false), 115 ephemeral_users_enabled_(false),
116 manager_creation_time_(base::TimeTicks::Now()), 116 manager_creation_time_(base::TimeTicks::Now()),
117 weak_factory_(this) { 117 weak_factory_(this) {
118 // UserManager instance should be used only on UI thread.
119 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
Dmitry Polukhin 2014/08/12 09:03:13 Why did you remove it?
Nikita (slow) 2014/08/12 09:34:42 unit_tests now use this class through FakeUserMan
120 UpdateLoginState(); 118 UpdateLoginState();
121 } 119 }
122 120
123 UserManagerBase::~UserManagerBase() { 121 UserManagerBase::~UserManagerBase() {
124 // Can't use STLDeleteElements because of the private destructor of User. 122 // Can't use STLDeleteElements because of the private destructor of User.
125 for (user_manager::UserList::iterator it = users_.begin(); it != users_.end(); 123 for (UserList::iterator it = users_.begin(); it != users_.end();
126 it = users_.erase(it)) { 124 it = users_.erase(it)) {
127 DeleteUser(*it); 125 DeleteUser(*it);
128 } 126 }
129 // These are pointers to the same User instances that were in users_ list. 127 // These are pointers to the same User instances that were in users_ list.
130 logged_in_users_.clear(); 128 logged_in_users_.clear();
131 lru_logged_in_users_.clear(); 129 lru_logged_in_users_.clear();
132 130
133 DeleteUser(active_user_); 131 DeleteUser(active_user_);
134 } 132 }
135 133
136 void UserManagerBase::Shutdown() { 134 void UserManagerBase::Shutdown() {
137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
138 } 136 }
139 137
140 const user_manager::UserList& UserManagerBase::GetUsers() const { 138 const UserList& UserManagerBase::GetUsers() const {
141 const_cast<UserManagerBase*>(this)->EnsureUsersLoaded(); 139 const_cast<UserManagerBase*>(this)->EnsureUsersLoaded();
142 return users_; 140 return users_;
143 } 141 }
144 142
145 const user_manager::UserList& UserManagerBase::GetLoggedInUsers() const { 143 const UserList& UserManagerBase::GetLoggedInUsers() const {
146 return logged_in_users_; 144 return logged_in_users_;
147 } 145 }
148 146
149 const user_manager::UserList& UserManagerBase::GetLRULoggedInUsers() const { 147 const UserList& UserManagerBase::GetLRULoggedInUsers() const {
150 return lru_logged_in_users_; 148 return lru_logged_in_users_;
151 } 149 }
152 150
153 const std::string& UserManagerBase::GetOwnerEmail() const { 151 const std::string& UserManagerBase::GetOwnerEmail() const {
154 return owner_email_; 152 return owner_email_;
155 } 153 }
156 154
157 void UserManagerBase::UserLoggedIn(const std::string& user_id, 155 void UserManagerBase::UserLoggedIn(const std::string& user_id,
158 const std::string& username_hash, 156 const std::string& username_hash,
159 bool browser_restart) { 157 bool browser_restart) {
160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
161 159
162 user_manager::User* user = FindUserInListAndModify(user_id); 160 User* user = FindUserInListAndModify(user_id);
163 if (active_user_ && user) { 161 if (active_user_ && user) {
164 user->set_is_logged_in(true); 162 user->set_is_logged_in(true);
165 user->set_username_hash(username_hash); 163 user->set_username_hash(username_hash);
166 logged_in_users_.push_back(user); 164 logged_in_users_.push_back(user);
167 lru_logged_in_users_.push_back(user); 165 lru_logged_in_users_.push_back(user);
168 166
169 // Reset the new user flag if the user already exists. 167 // Reset the new user flag if the user already exists.
170 SetIsCurrentUserNew(false); 168 SetIsCurrentUserNew(false);
171 NotifyUserAddedToSession(user, true /* user switch pending */); 169 NotifyUserAddedToSession(user, true /* user switch pending */);
172 170
173 return; 171 return;
174 } 172 }
175 173
176 if (user_id == chromeos::login::kGuestUserName) { 174 if (user_id == chromeos::login::kGuestUserName) {
177 GuestUserLoggedIn(); 175 GuestUserLoggedIn();
178 } else if (user_id == chromeos::login::kRetailModeUserName) { 176 } else if (user_id == chromeos::login::kRetailModeUserName) {
179 RetailModeUserLoggedIn(); 177 RetailModeUserLoggedIn();
180 } else if (IsKioskApp(user_id)) { 178 } else if (IsKioskApp(user_id)) {
181 KioskAppLoggedIn(user_id); 179 KioskAppLoggedIn(user_id);
182 } else if (IsDemoApp(user_id)) { 180 } else if (IsDemoApp(user_id)) {
183 DemoAccountLoggedIn(); 181 DemoAccountLoggedIn();
184 } else { 182 } else {
185 EnsureUsersLoaded(); 183 EnsureUsersLoaded();
186 184
187 if (user && user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { 185 if (user && user->GetType() == USER_TYPE_PUBLIC_ACCOUNT) {
188 PublicAccountUserLoggedIn(user); 186 PublicAccountUserLoggedIn(user);
189 } else if ((user && 187 } else if ((user && user->GetType() == USER_TYPE_SUPERVISED) ||
190 user->GetType() == user_manager::USER_TYPE_SUPERVISED) ||
191 (!user && 188 (!user &&
192 gaia::ExtractDomainName(user_id) == 189 gaia::ExtractDomainName(user_id) ==
193 chromeos::login::kSupervisedUserDomain)) { 190 chromeos::login::kSupervisedUserDomain)) {
194 SupervisedUserLoggedIn(user_id); 191 SupervisedUserLoggedIn(user_id);
195 } else if (browser_restart && IsPublicAccountMarkedForRemoval(user_id)) { 192 } else if (browser_restart && IsPublicAccountMarkedForRemoval(user_id)) {
196 PublicAccountUserLoggedIn( 193 PublicAccountUserLoggedIn(User::CreatePublicAccountUser(user_id));
197 user_manager::User::CreatePublicAccountUser(user_id));
198 } else if (user_id != GetOwnerEmail() && !user && 194 } else if (user_id != GetOwnerEmail() && !user &&
199 (AreEphemeralUsersEnabled() || browser_restart)) { 195 (AreEphemeralUsersEnabled() || browser_restart)) {
200 RegularUserLoggedInAsEphemeral(user_id); 196 RegularUserLoggedInAsEphemeral(user_id);
201 } else { 197 } else {
202 RegularUserLoggedIn(user_id); 198 RegularUserLoggedIn(user_id);
203 } 199 }
204 } 200 }
205 201
206 DCHECK(active_user_); 202 DCHECK(active_user_);
207 active_user_->set_is_logged_in(true); 203 active_user_->set_is_logged_in(true);
208 active_user_->set_is_active(true); 204 active_user_->set_is_active(true);
209 active_user_->set_username_hash(username_hash); 205 active_user_->set_username_hash(username_hash);
210 206
211 // Place user who just signed in to the top of the logged in users. 207 // Place user who just signed in to the top of the logged in users.
212 logged_in_users_.insert(logged_in_users_.begin(), active_user_); 208 logged_in_users_.insert(logged_in_users_.begin(), active_user_);
213 SetLRUUser(active_user_); 209 SetLRUUser(active_user_);
214 210
215 if (!primary_user_) { 211 if (!primary_user_) {
216 primary_user_ = active_user_; 212 primary_user_ = active_user_;
217 if (primary_user_->GetType() == user_manager::USER_TYPE_REGULAR) 213 if (primary_user_->GetType() == USER_TYPE_REGULAR)
218 SendRegularUserLoginMetrics(user_id); 214 SendRegularUserLoginMetrics(user_id);
219 } 215 }
220 216
221 UMA_HISTOGRAM_ENUMERATION("UserManager.LoginUserType", 217 UMA_HISTOGRAM_ENUMERATION(
222 active_user_->GetType(), 218 "UserManager.LoginUserType", active_user_->GetType(), NUM_USER_TYPES);
223 user_manager::NUM_USER_TYPES);
224 219
225 GetLocalState()->SetString( 220 GetLocalState()->SetString(
226 kLastLoggedInRegularUser, 221 kLastLoggedInRegularUser,
227 (active_user_->GetType() == user_manager::USER_TYPE_REGULAR) ? user_id 222 (active_user_->GetType() == USER_TYPE_REGULAR) ? user_id : "");
228 : "");
229 223
230 NotifyOnLogin(); 224 NotifyOnLogin();
231 PerformPostUserLoggedInActions(browser_restart); 225 PerformPostUserLoggedInActions(browser_restart);
232 } 226 }
233 227
234 void UserManagerBase::SwitchActiveUser(const std::string& user_id) { 228 void UserManagerBase::SwitchActiveUser(const std::string& user_id) {
235 user_manager::User* user = FindUserAndModify(user_id); 229 User* user = FindUserAndModify(user_id);
236 if (!user) { 230 if (!user) {
237 NOTREACHED() << "Switching to a non-existing user"; 231 NOTREACHED() << "Switching to a non-existing user";
238 return; 232 return;
239 } 233 }
240 if (user == active_user_) { 234 if (user == active_user_) {
241 NOTREACHED() << "Switching to a user who is already active"; 235 NOTREACHED() << "Switching to a user who is already active";
242 return; 236 return;
243 } 237 }
244 if (!user->is_logged_in()) { 238 if (!user->is_logged_in()) {
245 NOTREACHED() << "Switching to a user that is not logged in"; 239 NOTREACHED() << "Switching to a user that is not logged in";
246 return; 240 return;
247 } 241 }
248 if (user->GetType() != user_manager::USER_TYPE_REGULAR) { 242 if (user->GetType() != USER_TYPE_REGULAR) {
249 NOTREACHED() << "Switching to a non-regular user"; 243 NOTREACHED() << "Switching to a non-regular user";
250 return; 244 return;
251 } 245 }
252 if (user->username_hash().empty()) { 246 if (user->username_hash().empty()) {
253 NOTREACHED() << "Switching to a user that doesn't have username_hash set"; 247 NOTREACHED() << "Switching to a user that doesn't have username_hash set";
254 return; 248 return;
255 } 249 }
256 250
257 DCHECK(active_user_); 251 DCHECK(active_user_);
258 active_user_->set_is_active(false); 252 active_user_->set_is_active(false);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 } 319 }
326 320
327 // Make sure that new data is persisted to Local State. 321 // Make sure that new data is persisted to Local State.
328 GetLocalState()->CommitPendingWrite(); 322 GetLocalState()->CommitPendingWrite();
329 } 323 }
330 324
331 bool UserManagerBase::IsKnownUser(const std::string& user_id) const { 325 bool UserManagerBase::IsKnownUser(const std::string& user_id) const {
332 return FindUser(user_id) != NULL; 326 return FindUser(user_id) != NULL;
333 } 327 }
334 328
335 const user_manager::User* UserManagerBase::FindUser( 329 const User* UserManagerBase::FindUser(const std::string& user_id) const {
336 const std::string& user_id) const {
337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 330 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
338 if (active_user_ && active_user_->email() == user_id) 331 if (active_user_ && active_user_->email() == user_id)
339 return active_user_; 332 return active_user_;
340 return FindUserInList(user_id); 333 return FindUserInList(user_id);
341 } 334 }
342 335
343 user_manager::User* UserManagerBase::FindUserAndModify( 336 User* UserManagerBase::FindUserAndModify(const std::string& user_id) {
344 const std::string& user_id) {
345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
346 if (active_user_ && active_user_->email() == user_id) 338 if (active_user_ && active_user_->email() == user_id)
347 return active_user_; 339 return active_user_;
348 return FindUserInListAndModify(user_id); 340 return FindUserInListAndModify(user_id);
349 } 341 }
350 342
351 const user_manager::User* UserManagerBase::GetLoggedInUser() const { 343 const User* UserManagerBase::GetLoggedInUser() const {
352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 344 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
353 return active_user_; 345 return active_user_;
354 } 346 }
355 347
356 user_manager::User* UserManagerBase::GetLoggedInUser() { 348 User* UserManagerBase::GetLoggedInUser() {
357 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 349 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
358 return active_user_; 350 return active_user_;
359 } 351 }
360 352
361 const user_manager::User* UserManagerBase::GetActiveUser() const { 353 const User* UserManagerBase::GetActiveUser() const {
362 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
363 return active_user_; 355 return active_user_;
364 } 356 }
365 357
366 user_manager::User* UserManagerBase::GetActiveUser() { 358 User* UserManagerBase::GetActiveUser() {
367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
368 return active_user_; 360 return active_user_;
369 } 361 }
370 362
371 const user_manager::User* UserManagerBase::GetPrimaryUser() const { 363 const User* UserManagerBase::GetPrimaryUser() const {
372 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 364 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
373 return primary_user_; 365 return primary_user_;
374 } 366 }
375 367
376 void UserManagerBase::SaveUserOAuthStatus( 368 void UserManagerBase::SaveUserOAuthStatus(
377 const std::string& user_id, 369 const std::string& user_id,
378 user_manager::User::OAuthTokenStatus oauth_token_status) { 370 User::OAuthTokenStatus oauth_token_status) {
379 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 371 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
380 372
381 DVLOG(1) << "Saving user OAuth token status in Local State"; 373 DVLOG(1) << "Saving user OAuth token status in Local State";
382 user_manager::User* user = FindUserAndModify(user_id); 374 User* user = FindUserAndModify(user_id);
383 if (user) 375 if (user)
384 user->set_oauth_token_status(oauth_token_status); 376 user->set_oauth_token_status(oauth_token_status);
385 377
386 // Do not update local state if data stored or cached outside the user's 378 // Do not update local state if data stored or cached outside the user's
387 // cryptohome is to be treated as ephemeral. 379 // cryptohome is to be treated as ephemeral.
388 if (IsUserNonCryptohomeDataEphemeral(user_id)) 380 if (IsUserNonCryptohomeDataEphemeral(user_id))
389 return; 381 return;
390 382
391 DictionaryPrefUpdate oauth_status_update(GetLocalState(), 383 DictionaryPrefUpdate oauth_status_update(GetLocalState(),
392 kUserOAuthTokenStatus); 384 kUserOAuthTokenStatus);
(...skipping 14 matching lines...) Expand all
407 DictionaryPrefUpdate force_online_update(GetLocalState(), 399 DictionaryPrefUpdate force_online_update(GetLocalState(),
408 kUserForceOnlineSignin); 400 kUserForceOnlineSignin);
409 force_online_update->SetBooleanWithoutPathExpansion(user_id, 401 force_online_update->SetBooleanWithoutPathExpansion(user_id,
410 force_online_signin); 402 force_online_signin);
411 } 403 }
412 404
413 void UserManagerBase::SaveUserDisplayName(const std::string& user_id, 405 void UserManagerBase::SaveUserDisplayName(const std::string& user_id,
414 const base::string16& display_name) { 406 const base::string16& display_name) {
415 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 407 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
416 408
417 if (user_manager::User* user = FindUserAndModify(user_id)) { 409 if (User* user = FindUserAndModify(user_id)) {
418 user->set_display_name(display_name); 410 user->set_display_name(display_name);
419 411
420 // Do not update local state if data stored or cached outside the user's 412 // Do not update local state if data stored or cached outside the user's
421 // cryptohome is to be treated as ephemeral. 413 // cryptohome is to be treated as ephemeral.
422 if (!IsUserNonCryptohomeDataEphemeral(user_id)) { 414 if (!IsUserNonCryptohomeDataEphemeral(user_id)) {
423 DictionaryPrefUpdate display_name_update(GetLocalState(), 415 DictionaryPrefUpdate display_name_update(GetLocalState(),
424 kUserDisplayName); 416 kUserDisplayName);
425 display_name_update->SetWithoutPathExpansion( 417 display_name_update->SetWithoutPathExpansion(
426 user_id, new base::StringValue(display_name)); 418 user_id, new base::StringValue(display_name));
427 } 419 }
428 } 420 }
429 } 421 }
430 422
431 base::string16 UserManagerBase::GetUserDisplayName( 423 base::string16 UserManagerBase::GetUserDisplayName(
432 const std::string& user_id) const { 424 const std::string& user_id) const {
433 const user_manager::User* user = FindUser(user_id); 425 const User* user = FindUser(user_id);
434 return user ? user->display_name() : base::string16(); 426 return user ? user->display_name() : base::string16();
435 } 427 }
436 428
437 void UserManagerBase::SaveUserDisplayEmail(const std::string& user_id, 429 void UserManagerBase::SaveUserDisplayEmail(const std::string& user_id,
438 const std::string& display_email) { 430 const std::string& display_email) {
439 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 431 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
440 432
441 user_manager::User* user = FindUserAndModify(user_id); 433 User* user = FindUserAndModify(user_id);
442 if (!user) 434 if (!user)
443 return; // Ignore if there is no such user. 435 return; // Ignore if there is no such user.
444 436
445 user->set_display_email(display_email); 437 user->set_display_email(display_email);
446 438
447 // Do not update local state if data stored or cached outside the user's 439 // Do not update local state if data stored or cached outside the user's
448 // cryptohome is to be treated as ephemeral. 440 // cryptohome is to be treated as ephemeral.
449 if (IsUserNonCryptohomeDataEphemeral(user_id)) 441 if (IsUserNonCryptohomeDataEphemeral(user_id))
450 return; 442 return;
451 443
452 DictionaryPrefUpdate display_email_update(GetLocalState(), kUserDisplayEmail); 444 DictionaryPrefUpdate display_email_update(GetLocalState(), kUserDisplayEmail);
453 display_email_update->SetWithoutPathExpansion( 445 display_email_update->SetWithoutPathExpansion(
454 user_id, new base::StringValue(display_email)); 446 user_id, new base::StringValue(display_email));
455 } 447 }
456 448
457 std::string UserManagerBase::GetUserDisplayEmail( 449 std::string UserManagerBase::GetUserDisplayEmail(
458 const std::string& user_id) const { 450 const std::string& user_id) const {
459 const user_manager::User* user = FindUser(user_id); 451 const User* user = FindUser(user_id);
460 return user ? user->display_email() : user_id; 452 return user ? user->display_email() : user_id;
461 } 453 }
462 454
463 void UserManagerBase::UpdateUserAccountData( 455 void UserManagerBase::UpdateUserAccountData(
464 const std::string& user_id, 456 const std::string& user_id,
465 const UserAccountData& account_data) { 457 const UserAccountData& account_data) {
466 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 458 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
467 459
468 SaveUserDisplayName(user_id, account_data.display_name()); 460 SaveUserDisplayName(user_id, account_data.display_name());
469 461
470 if (user_manager::User* user = FindUserAndModify(user_id)) { 462 if (User* user = FindUserAndModify(user_id)) {
471 base::string16 given_name = account_data.given_name(); 463 base::string16 given_name = account_data.given_name();
472 user->set_given_name(given_name); 464 user->set_given_name(given_name);
473 if (!IsUserNonCryptohomeDataEphemeral(user_id)) { 465 if (!IsUserNonCryptohomeDataEphemeral(user_id)) {
474 DictionaryPrefUpdate given_name_update(GetLocalState(), kUserGivenName); 466 DictionaryPrefUpdate given_name_update(GetLocalState(), kUserGivenName);
475 given_name_update->SetWithoutPathExpansion( 467 given_name_update->SetWithoutPathExpansion(
476 user_id, new base::StringValue(given_name)); 468 user_id, new base::StringValue(given_name));
477 } 469 }
478 } 470 }
479 471
480 UpdateUserAccountLocale(user_id, account_data.locale()); 472 UpdateUserAccountLocale(user_id, account_data.locale());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return IsUserLoggedIn() && active_user_->can_lock(); 525 return IsUserLoggedIn() && active_user_->can_lock();
534 } 526 }
535 527
536 bool UserManagerBase::IsUserLoggedIn() const { 528 bool UserManagerBase::IsUserLoggedIn() const {
537 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 529 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
538 return active_user_; 530 return active_user_;
539 } 531 }
540 532
541 bool UserManagerBase::IsLoggedInAsRegularUser() const { 533 bool UserManagerBase::IsLoggedInAsRegularUser() const {
542 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 534 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
543 return IsUserLoggedIn() && 535 return IsUserLoggedIn() && active_user_->GetType() == USER_TYPE_REGULAR;
544 active_user_->GetType() == user_manager::USER_TYPE_REGULAR;
545 } 536 }
546 537
547 bool UserManagerBase::IsLoggedInAsDemoUser() const { 538 bool UserManagerBase::IsLoggedInAsDemoUser() const {
548 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 539 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
549 return IsUserLoggedIn() && 540 return IsUserLoggedIn() && active_user_->GetType() == USER_TYPE_RETAIL_MODE;
550 active_user_->GetType() == user_manager::USER_TYPE_RETAIL_MODE;
551 } 541 }
552 542
553 bool UserManagerBase::IsLoggedInAsPublicAccount() const { 543 bool UserManagerBase::IsLoggedInAsPublicAccount() const {
554 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 544 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
555 return IsUserLoggedIn() && 545 return IsUserLoggedIn() &&
556 active_user_->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT; 546 active_user_->GetType() == USER_TYPE_PUBLIC_ACCOUNT;
557 } 547 }
558 548
559 bool UserManagerBase::IsLoggedInAsGuest() const { 549 bool UserManagerBase::IsLoggedInAsGuest() const {
560 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 550 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
561 return IsUserLoggedIn() && 551 return IsUserLoggedIn() && active_user_->GetType() == USER_TYPE_GUEST;
562 active_user_->GetType() == user_manager::USER_TYPE_GUEST;
563 } 552 }
564 553
565 bool UserManagerBase::IsLoggedInAsSupervisedUser() const { 554 bool UserManagerBase::IsLoggedInAsSupervisedUser() const {
566 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 555 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
567 return IsUserLoggedIn() && 556 return IsUserLoggedIn() && active_user_->GetType() == USER_TYPE_SUPERVISED;
568 active_user_->GetType() == user_manager::USER_TYPE_SUPERVISED;
569 } 557 }
570 558
571 bool UserManagerBase::IsLoggedInAsKioskApp() const { 559 bool UserManagerBase::IsLoggedInAsKioskApp() const {
572 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 560 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
573 return IsUserLoggedIn() && 561 return IsUserLoggedIn() && active_user_->GetType() == USER_TYPE_KIOSK_APP;
574 active_user_->GetType() == user_manager::USER_TYPE_KIOSK_APP;
575 } 562 }
576 563
577 bool UserManagerBase::IsLoggedInAsStub() const { 564 bool UserManagerBase::IsLoggedInAsStub() const {
578 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 565 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
579 return IsUserLoggedIn() && active_user_->email() == login::kStubUser; 566 return IsUserLoggedIn() &&
567 active_user_->email() == chromeos::login::kStubUser;
580 } 568 }
581 569
582 bool UserManagerBase::IsSessionStarted() const { 570 bool UserManagerBase::IsSessionStarted() const {
583 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 571 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
584 return session_started_; 572 return session_started_;
585 } 573 }
586 574
587 bool UserManagerBase::IsUserNonCryptohomeDataEphemeral( 575 bool UserManagerBase::IsUserNonCryptohomeDataEphemeral(
588 const std::string& user_id) const { 576 const std::string& user_id) const {
589 // Data belonging to the guest, retail mode and stub users is always 577 // Data belonging to the guest, retail mode and stub users is always
590 // ephemeral. 578 // ephemeral.
591 if (user_id == login::kGuestUserName || 579 if (user_id == chromeos::login::kGuestUserName ||
592 user_id == login::kRetailModeUserName || user_id == login::kStubUser) { 580 user_id == chromeos::login::kRetailModeUserName ||
581 user_id == chromeos::login::kStubUser) {
593 return true; 582 return true;
594 } 583 }
595 584
596 // Data belonging to the owner, anyone found on the user list and obsolete 585 // Data belonging to the owner, anyone found on the user list and obsolete
597 // public accounts whose data has not been removed yet is not ephemeral. 586 // public accounts whose data has not been removed yet is not ephemeral.
598 if (user_id == GetOwnerEmail() || UserExistsInList(user_id) || 587 if (user_id == GetOwnerEmail() || UserExistsInList(user_id) ||
599 IsPublicAccountMarkedForRemoval(user_id)) { 588 IsPublicAccountMarkedForRemoval(user_id)) {
600 return false; 589 return false;
601 } 590 }
602 591
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 629 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
641 session_state_observer_list_.RemoveObserver(obs); 630 session_state_observer_list_.RemoveObserver(obs);
642 } 631 }
643 632
644 void UserManagerBase::NotifyLocalStateChanged() { 633 void UserManagerBase::NotifyLocalStateChanged() {
645 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 634 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
646 FOR_EACH_OBSERVER( 635 FOR_EACH_OBSERVER(
647 UserManager::Observer, observer_list_, LocalStateChanged(this)); 636 UserManager::Observer, observer_list_, LocalStateChanged(this));
648 } 637 }
649 638
650 bool UserManagerBase::CanUserBeRemoved(const user_manager::User* user) const { 639 bool UserManagerBase::CanUserBeRemoved(const User* user) const {
651 // Only regular and supervised users are allowed to be manually removed. 640 // Only regular and supervised users are allowed to be manually removed.
652 if (!user || (user->GetType() != user_manager::USER_TYPE_REGULAR && 641 if (!user || (user->GetType() != USER_TYPE_REGULAR &&
653 user->GetType() != user_manager::USER_TYPE_SUPERVISED)) { 642 user->GetType() != USER_TYPE_SUPERVISED)) {
654 return false; 643 return false;
655 } 644 }
656 645
657 // Sanity check: we must not remove single user unless it's an enterprise 646 // Sanity check: we must not remove single user unless it's an enterprise
658 // device. This check may seem redundant at a first sight because 647 // device. This check may seem redundant at a first sight because
659 // this single user must be an owner and we perform special check later 648 // this single user must be an owner and we perform special check later
660 // in order not to remove an owner. However due to non-instant nature of 649 // in order not to remove an owner. However due to non-instant nature of
661 // ownership assignment this later check may sometimes fail. 650 // ownership assignment this later check may sometimes fail.
662 // See http://crosbug.com/12723 651 // See http://crosbug.com/12723
663 if (users_.size() < 2 && !IsEnterpriseManaged()) 652 if (users_.size() < 2 && !IsEnterpriseManaged())
664 return false; 653 return false;
665 654
666 // Sanity check: do not allow any of the the logged in users to be removed. 655 // Sanity check: do not allow any of the the logged in users to be removed.
667 for (user_manager::UserList::const_iterator it = logged_in_users_.begin(); 656 for (UserList::const_iterator it = logged_in_users_.begin();
668 it != logged_in_users_.end(); 657 it != logged_in_users_.end();
669 ++it) { 658 ++it) {
670 if ((*it)->email() == user->email()) 659 if ((*it)->email() == user->email())
671 return false; 660 return false;
672 } 661 }
673 662
674 return true; 663 return true;
675 } 664 }
676 665
677 bool UserManagerBase::GetEphemeralUsersEnabled() const { 666 bool UserManagerBase::GetEphemeralUsersEnabled() const {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 // Load regular users and supervised users. 716 // Load regular users and supervised users.
728 std::vector<std::string> regular_users; 717 std::vector<std::string> regular_users;
729 std::set<std::string> regular_users_set; 718 std::set<std::string> regular_users_set;
730 ParseUserList(*prefs_regular_users, 719 ParseUserList(*prefs_regular_users,
731 public_sessions_set, 720 public_sessions_set,
732 &regular_users, 721 &regular_users,
733 &regular_users_set); 722 &regular_users_set);
734 for (std::vector<std::string>::const_iterator it = regular_users.begin(); 723 for (std::vector<std::string>::const_iterator it = regular_users.begin();
735 it != regular_users.end(); 724 it != regular_users.end();
736 ++it) { 725 ++it) {
737 user_manager::User* user = NULL; 726 User* user = NULL;
738 const std::string domain = gaia::ExtractDomainName(*it); 727 const std::string domain = gaia::ExtractDomainName(*it);
739 if (domain == chromeos::login::kSupervisedUserDomain) 728 if (domain == chromeos::login::kSupervisedUserDomain)
740 user = user_manager::User::CreateSupervisedUser(*it); 729 user = User::CreateSupervisedUser(*it);
741 else 730 else
742 user = user_manager::User::CreateRegularUser(*it); 731 user = User::CreateRegularUser(*it);
743 user->set_oauth_token_status(LoadUserOAuthStatus(*it)); 732 user->set_oauth_token_status(LoadUserOAuthStatus(*it));
744 user->set_force_online_signin(LoadForceOnlineSignin(*it)); 733 user->set_force_online_signin(LoadForceOnlineSignin(*it));
745 users_.push_back(user); 734 users_.push_back(user);
746 735
747 base::string16 display_name; 736 base::string16 display_name;
748 if (prefs_display_names->GetStringWithoutPathExpansion(*it, 737 if (prefs_display_names->GetStringWithoutPathExpansion(*it,
749 &display_name)) { 738 &display_name)) {
750 user->set_display_name(display_name); 739 user->set_display_name(display_name);
751 } 740 }
752 741
753 base::string16 given_name; 742 base::string16 given_name;
754 if (prefs_given_names->GetStringWithoutPathExpansion(*it, &given_name)) { 743 if (prefs_given_names->GetStringWithoutPathExpansion(*it, &given_name)) {
755 user->set_given_name(given_name); 744 user->set_given_name(given_name);
756 } 745 }
757 746
758 std::string display_email; 747 std::string display_email;
759 if (prefs_display_emails->GetStringWithoutPathExpansion(*it, 748 if (prefs_display_emails->GetStringWithoutPathExpansion(*it,
760 &display_email)) { 749 &display_email)) {
761 user->set_display_email(display_email); 750 user->set_display_email(display_email);
762 } 751 }
763 } 752 }
764 753
765 user_loading_stage_ = STAGE_LOADED; 754 user_loading_stage_ = STAGE_LOADED;
766 755
767 PerformPostUserListLoadingActions(); 756 PerformPostUserListLoadingActions();
768 } 757 }
769 758
770 user_manager::UserList& UserManagerBase::GetUsersAndModify() { 759 UserList& UserManagerBase::GetUsersAndModify() {
771 EnsureUsersLoaded(); 760 EnsureUsersLoaded();
772 return users_; 761 return users_;
773 } 762 }
774 763
775 const user_manager::User* UserManagerBase::FindUserInList( 764 const User* UserManagerBase::FindUserInList(const std::string& user_id) const {
776 const std::string& user_id) const { 765 const UserList& users = GetUsers();
777 const user_manager::UserList& users = GetUsers(); 766 for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) {
778 for (user_manager::UserList::const_iterator it = users.begin();
779 it != users.end();
780 ++it) {
781 if ((*it)->email() == user_id) 767 if ((*it)->email() == user_id)
782 return *it; 768 return *it;
783 } 769 }
784 return NULL; 770 return NULL;
785 } 771 }
786 772
787 const bool UserManagerBase::UserExistsInList(const std::string& user_id) const { 773 const bool UserManagerBase::UserExistsInList(const std::string& user_id) const {
788 const base::ListValue* user_list = GetLocalState()->GetList(kRegularUsers); 774 const base::ListValue* user_list = GetLocalState()->GetList(kRegularUsers);
789 for (size_t i = 0; i < user_list->GetSize(); ++i) { 775 for (size_t i = 0; i < user_list->GetSize(); ++i) {
790 std::string email; 776 std::string email;
791 if (user_list->GetString(i, &email) && (user_id == email)) 777 if (user_list->GetString(i, &email) && (user_id == email))
792 return true; 778 return true;
793 } 779 }
794 return false; 780 return false;
795 } 781 }
796 782
797 user_manager::User* UserManagerBase::FindUserInListAndModify( 783 User* UserManagerBase::FindUserInListAndModify(const std::string& user_id) {
798 const std::string& user_id) { 784 UserList& users = GetUsersAndModify();
799 user_manager::UserList& users = GetUsersAndModify(); 785 for (UserList::iterator it = users.begin(); it != users.end(); ++it) {
800 for (user_manager::UserList::iterator it = users.begin(); it != users.end();
801 ++it) {
802 if ((*it)->email() == user_id) 786 if ((*it)->email() == user_id)
803 return *it; 787 return *it;
804 } 788 }
805 return NULL; 789 return NULL;
806 } 790 }
807 791
808 void UserManagerBase::GuestUserLoggedIn() { 792 void UserManagerBase::GuestUserLoggedIn() {
809 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 793 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
810 active_user_ = user_manager::User::CreateGuestUser(); 794 active_user_ = User::CreateGuestUser();
811 } 795 }
812 796
813 void UserManagerBase::AddUserRecord(user_manager::User* user) { 797 void UserManagerBase::AddUserRecord(User* user) {
814 // Add the user to the front of the user list. 798 // Add the user to the front of the user list.
815 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers); 799 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers);
816 prefs_users_update->Insert(0, new base::StringValue(user->email())); 800 prefs_users_update->Insert(0, new base::StringValue(user->email()));
817 users_.insert(users_.begin(), user); 801 users_.insert(users_.begin(), user);
818 } 802 }
819 803
820 void UserManagerBase::RegularUserLoggedIn(const std::string& user_id) { 804 void UserManagerBase::RegularUserLoggedIn(const std::string& user_id) {
821 // Remove the user from the user list. 805 // Remove the user from the user list.
822 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id); 806 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id);
823 807
824 // If the user was not found on the user list, create a new user. 808 // If the user was not found on the user list, create a new user.
825 SetIsCurrentUserNew(!active_user_); 809 SetIsCurrentUserNew(!active_user_);
826 if (IsCurrentUserNew()) { 810 if (IsCurrentUserNew()) {
827 active_user_ = user_manager::User::CreateRegularUser(user_id); 811 active_user_ = User::CreateRegularUser(user_id);
828 active_user_->set_oauth_token_status(LoadUserOAuthStatus(user_id)); 812 active_user_->set_oauth_token_status(LoadUserOAuthStatus(user_id));
829 SaveUserDisplayName(active_user_->email(), 813 SaveUserDisplayName(active_user_->email(),
830 base::UTF8ToUTF16(active_user_->GetAccountName(true))); 814 base::UTF8ToUTF16(active_user_->GetAccountName(true)));
831 } 815 }
832 816
833 AddUserRecord(active_user_); 817 AddUserRecord(active_user_);
834 818
835 // Make sure that new data is persisted to Local State. 819 // Make sure that new data is persisted to Local State.
836 GetLocalState()->CommitPendingWrite(); 820 GetLocalState()->CommitPendingWrite();
837 } 821 }
838 822
839 void UserManagerBase::RegularUserLoggedInAsEphemeral( 823 void UserManagerBase::RegularUserLoggedInAsEphemeral(
840 const std::string& user_id) { 824 const std::string& user_id) {
841 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 825 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
842 SetIsCurrentUserNew(true); 826 SetIsCurrentUserNew(true);
843 is_current_user_ephemeral_regular_user_ = true; 827 is_current_user_ephemeral_regular_user_ = true;
844 active_user_ = user_manager::User::CreateRegularUser(user_id); 828 active_user_ = User::CreateRegularUser(user_id);
845 } 829 }
846 830
847 void UserManagerBase::NotifyOnLogin() { 831 void UserManagerBase::NotifyOnLogin() {
848 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 832 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
849 833
850 NotifyActiveUserHashChanged(active_user_->username_hash()); 834 NotifyActiveUserHashChanged(active_user_->username_hash());
851 NotifyActiveUserChanged(active_user_); 835 NotifyActiveUserChanged(active_user_);
852 UpdateLoginState(); 836 UpdateLoginState();
853 } 837 }
854 838
855 user_manager::User::OAuthTokenStatus UserManagerBase::LoadUserOAuthStatus( 839 User::OAuthTokenStatus UserManagerBase::LoadUserOAuthStatus(
856 const std::string& user_id) const { 840 const std::string& user_id) const {
857 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 841 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
858 842
859 const base::DictionaryValue* prefs_oauth_status = 843 const base::DictionaryValue* prefs_oauth_status =
860 GetLocalState()->GetDictionary(kUserOAuthTokenStatus); 844 GetLocalState()->GetDictionary(kUserOAuthTokenStatus);
861 int oauth_token_status = user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN; 845 int oauth_token_status = User::OAUTH_TOKEN_STATUS_UNKNOWN;
862 if (prefs_oauth_status && 846 if (prefs_oauth_status &&
863 prefs_oauth_status->GetIntegerWithoutPathExpansion(user_id, 847 prefs_oauth_status->GetIntegerWithoutPathExpansion(user_id,
864 &oauth_token_status)) { 848 &oauth_token_status)) {
865 user_manager::User::OAuthTokenStatus result = 849 User::OAuthTokenStatus status =
866 static_cast<user_manager::User::OAuthTokenStatus>(oauth_token_status); 850 static_cast<User::OAuthTokenStatus>(oauth_token_status);
867 if (result == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) 851 HandleUserOAuthTokenStatusChange(user_id, status);
868 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(result); 852
869 return result; 853 return status;
870 } 854 }
871 return user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN; 855 return User::OAUTH_TOKEN_STATUS_UNKNOWN;
872 } 856 }
873 857
874 bool UserManagerBase::LoadForceOnlineSignin(const std::string& user_id) const { 858 bool UserManagerBase::LoadForceOnlineSignin(const std::string& user_id) const {
875 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 859 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
876 860
877 const base::DictionaryValue* prefs_force_online = 861 const base::DictionaryValue* prefs_force_online =
878 GetLocalState()->GetDictionary(kUserForceOnlineSignin); 862 GetLocalState()->GetDictionary(kUserForceOnlineSignin);
879 bool force_online_signin = false; 863 bool force_online_signin = false;
880 if (prefs_force_online) { 864 if (prefs_force_online) {
881 prefs_force_online->GetBooleanWithoutPathExpansion(user_id, 865 prefs_force_online->GetBooleanWithoutPathExpansion(user_id,
(...skipping 13 matching lines...) Expand all
895 DictionaryPrefUpdate prefs_display_email_update(prefs, kUserDisplayEmail); 879 DictionaryPrefUpdate prefs_display_email_update(prefs, kUserDisplayEmail);
896 prefs_display_email_update->RemoveWithoutPathExpansion(user_id, NULL); 880 prefs_display_email_update->RemoveWithoutPathExpansion(user_id, NULL);
897 881
898 DictionaryPrefUpdate prefs_oauth_update(prefs, kUserOAuthTokenStatus); 882 DictionaryPrefUpdate prefs_oauth_update(prefs, kUserOAuthTokenStatus);
899 prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL); 883 prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL);
900 884
901 DictionaryPrefUpdate prefs_force_online_update(prefs, kUserForceOnlineSignin); 885 DictionaryPrefUpdate prefs_force_online_update(prefs, kUserForceOnlineSignin);
902 prefs_force_online_update->RemoveWithoutPathExpansion(user_id, NULL); 886 prefs_force_online_update->RemoveWithoutPathExpansion(user_id, NULL);
903 } 887 }
904 888
905 user_manager::User* UserManagerBase::RemoveRegularOrSupervisedUserFromList( 889 User* UserManagerBase::RemoveRegularOrSupervisedUserFromList(
906 const std::string& user_id) { 890 const std::string& user_id) {
907 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers); 891 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers);
908 prefs_users_update->Clear(); 892 prefs_users_update->Clear();
909 user_manager::User* user = NULL; 893 User* user = NULL;
910 for (user_manager::UserList::iterator it = users_.begin(); 894 for (UserList::iterator it = users_.begin(); it != users_.end();) {
911 it != users_.end();) {
912 const std::string user_email = (*it)->email(); 895 const std::string user_email = (*it)->email();
913 if (user_email == user_id) { 896 if (user_email == user_id) {
914 user = *it; 897 user = *it;
915 it = users_.erase(it); 898 it = users_.erase(it);
916 } else { 899 } else {
917 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR || 900 if ((*it)->GetType() == USER_TYPE_REGULAR ||
918 (*it)->GetType() == user_manager::USER_TYPE_SUPERVISED) { 901 (*it)->GetType() == USER_TYPE_SUPERVISED) {
919 prefs_users_update->Append(new base::StringValue(user_email)); 902 prefs_users_update->Append(new base::StringValue(user_email));
920 } 903 }
921 ++it; 904 ++it;
922 } 905 }
923 } 906 }
924 return user; 907 return user;
925 } 908 }
926 909
927 void UserManagerBase::NotifyActiveUserChanged( 910 void UserManagerBase::NotifyActiveUserChanged(const User* active_user) {
928 const user_manager::User* active_user) {
929 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 911 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
930 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 912 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
931 session_state_observer_list_, 913 session_state_observer_list_,
932 ActiveUserChanged(active_user)); 914 ActiveUserChanged(active_user));
933 } 915 }
934 916
935 void UserManagerBase::NotifyUserAddedToSession( 917 void UserManagerBase::NotifyUserAddedToSession(const User* added_user,
936 const user_manager::User* added_user, 918 bool user_switch_pending) {
937 bool user_switch_pending) {
938 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 919 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
939 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 920 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
940 session_state_observer_list_, 921 session_state_observer_list_,
941 UserAddedToSession(added_user)); 922 UserAddedToSession(added_user));
942 } 923 }
943 924
944 void UserManagerBase::NotifyActiveUserHashChanged(const std::string& hash) { 925 void UserManagerBase::NotifyActiveUserHashChanged(const std::string& hash) {
945 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 926 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
946 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 927 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
947 session_state_observer_list_, 928 session_state_observer_list_,
948 ActiveUserHashChanged(hash)); 929 ActiveUserHashChanged(hash));
949 } 930 }
950 931
951 void UserManagerBase::UpdateLoginState() { 932 void UserManagerBase::UpdateLoginState() {
952 if (!LoginState::IsInitialized()) 933 if (!chromeos::LoginState::IsInitialized())
953 return; // LoginState may not be intialized in tests. 934 return; // LoginState may not be intialized in tests.
954 935
955 LoginState::LoggedInState logged_in_state; 936 chromeos::LoginState::LoggedInState logged_in_state;
956 logged_in_state = 937 logged_in_state = active_user_ ? chromeos::LoginState::LOGGED_IN_ACTIVE
957 active_user_ ? LoginState::LOGGED_IN_ACTIVE : LoginState::LOGGED_IN_NONE; 938 : chromeos::LoginState::LOGGED_IN_NONE;
958 939
959 LoginState::LoggedInUserType login_user_type; 940 chromeos::LoginState::LoggedInUserType login_user_type;
960 if (logged_in_state == LoginState::LOGGED_IN_NONE) 941 if (logged_in_state == chromeos::LoginState::LOGGED_IN_NONE)
961 login_user_type = LoginState::LOGGED_IN_USER_NONE; 942 login_user_type = chromeos::LoginState::LOGGED_IN_USER_NONE;
962 else if (is_current_user_owner_) 943 else if (is_current_user_owner_)
963 login_user_type = LoginState::LOGGED_IN_USER_OWNER; 944 login_user_type = chromeos::LoginState::LOGGED_IN_USER_OWNER;
964 else if (active_user_->GetType() == user_manager::USER_TYPE_GUEST) 945 else if (active_user_->GetType() == USER_TYPE_GUEST)
965 login_user_type = LoginState::LOGGED_IN_USER_GUEST; 946 login_user_type = chromeos::LoginState::LOGGED_IN_USER_GUEST;
966 else if (active_user_->GetType() == user_manager::USER_TYPE_RETAIL_MODE) 947 else if (active_user_->GetType() == USER_TYPE_RETAIL_MODE)
967 login_user_type = LoginState::LOGGED_IN_USER_RETAIL_MODE; 948 login_user_type = chromeos::LoginState::LOGGED_IN_USER_RETAIL_MODE;
968 else if (active_user_->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) 949 else if (active_user_->GetType() == USER_TYPE_PUBLIC_ACCOUNT)
969 login_user_type = LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT; 950 login_user_type = chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT;
970 else if (active_user_->GetType() == user_manager::USER_TYPE_SUPERVISED) 951 else if (active_user_->GetType() == USER_TYPE_SUPERVISED)
971 login_user_type = LoginState::LOGGED_IN_USER_SUPERVISED; 952 login_user_type = chromeos::LoginState::LOGGED_IN_USER_SUPERVISED;
972 else if (active_user_->GetType() == user_manager::USER_TYPE_KIOSK_APP) 953 else if (active_user_->GetType() == USER_TYPE_KIOSK_APP)
973 login_user_type = LoginState::LOGGED_IN_USER_KIOSK_APP; 954 login_user_type = chromeos::LoginState::LOGGED_IN_USER_KIOSK_APP;
974 else 955 else
975 login_user_type = LoginState::LOGGED_IN_USER_REGULAR; 956 login_user_type = chromeos::LoginState::LOGGED_IN_USER_REGULAR;
976 957
977 if (primary_user_) { 958 if (primary_user_) {
978 LoginState::Get()->SetLoggedInStateAndPrimaryUser( 959 chromeos::LoginState::Get()->SetLoggedInStateAndPrimaryUser(
979 logged_in_state, login_user_type, primary_user_->username_hash()); 960 logged_in_state, login_user_type, primary_user_->username_hash());
980 } else { 961 } else {
981 LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type); 962 chromeos::LoginState::Get()->SetLoggedInState(logged_in_state,
963 login_user_type);
982 } 964 }
983 } 965 }
984 966
985 void UserManagerBase::SetLRUUser(user_manager::User* user) { 967 void UserManagerBase::SetLRUUser(User* user) {
986 user_manager::UserList::iterator it = 968 UserList::iterator it =
987 std::find(lru_logged_in_users_.begin(), lru_logged_in_users_.end(), user); 969 std::find(lru_logged_in_users_.begin(), lru_logged_in_users_.end(), user);
988 if (it != lru_logged_in_users_.end()) 970 if (it != lru_logged_in_users_.end())
989 lru_logged_in_users_.erase(it); 971 lru_logged_in_users_.erase(it);
990 lru_logged_in_users_.insert(lru_logged_in_users_.begin(), user); 972 lru_logged_in_users_.insert(lru_logged_in_users_.begin(), user);
991 } 973 }
992 974
993 void UserManagerBase::SendRegularUserLoginMetrics(const std::string& user_id) { 975 void UserManagerBase::SendRegularUserLoginMetrics(const std::string& user_id) {
994 // If this isn't the first time Chrome was run after the system booted, 976 // If this isn't the first time Chrome was run after the system booted,
995 // assume that Chrome was restarted because a previous session ended. 977 // assume that Chrome was restarted because a previous session ended.
996 if (!CommandLine::ForCurrentProcess()->HasSwitch( 978 if (!CommandLine::ForCurrentProcess()->HasSwitch(
997 switches::kFirstExecAfterBoot)) { 979 chromeos::switches::kFirstExecAfterBoot)) {
998 const std::string last_email = 980 const std::string last_email =
999 GetLocalState()->GetString(kLastLoggedInRegularUser); 981 GetLocalState()->GetString(kLastLoggedInRegularUser);
1000 const base::TimeDelta time_to_login = 982 const base::TimeDelta time_to_login =
1001 base::TimeTicks::Now() - manager_creation_time_; 983 base::TimeTicks::Now() - manager_creation_time_;
1002 if (!last_email.empty() && user_id != last_email && 984 if (!last_email.empty() && user_id != last_email &&
1003 time_to_login.InSeconds() <= kLogoutToLoginDelayMaxSec) { 985 time_to_login.InSeconds() <= kLogoutToLoginDelayMaxSec) {
1004 UMA_HISTOGRAM_CUSTOM_COUNTS("UserManager.LogoutToLoginDelay", 986 UMA_HISTOGRAM_CUSTOM_COUNTS("UserManager.LogoutToLoginDelay",
1005 time_to_login.InSeconds(), 987 time_to_login.InSeconds(),
1006 0, 988 0,
1007 kLogoutToLoginDelayMaxSec, 989 kLogoutToLoginDelayMaxSec,
1008 50); 990 50);
1009 } 991 }
1010 } 992 }
1011 } 993 }
1012 994
1013 void UserManagerBase::UpdateUserAccountLocale(const std::string& user_id, 995 void UserManagerBase::UpdateUserAccountLocale(const std::string& user_id,
1014 const std::string& locale) { 996 const std::string& locale) {
1015 if (!locale.empty() && locale != GetApplicationLocale()) { 997 if (!locale.empty() && locale != GetApplicationLocale()) {
1016 base::Callback<void(const std::string&)> on_resolve_callback = 998 base::Callback<void(const std::string&)> on_resolve_callback =
1017 base::Bind(&UserManagerBase::DoUpdateAccountLocale, 999 base::Bind(&UserManagerBase::DoUpdateAccountLocale,
1018 weak_factory_.GetWeakPtr(), 1000 weak_factory_.GetWeakPtr(),
1019 user_id); 1001 user_id);
1020 BrowserThread::PostBlockingPoolTask(FROM_HERE, 1002 BrowserThread::PostBlockingPoolTask(
1021 base::Bind(ResolveLocale, 1003 FROM_HERE, base::Bind(ResolveLocale, locale, on_resolve_callback));
1022 locale,
1023 on_resolve_callback));
1024 } else { 1004 } else {
1025 DoUpdateAccountLocale(user_id, locale); 1005 DoUpdateAccountLocale(user_id, locale);
1026 } 1006 }
1027 } 1007 }
1028 1008
1029 void UserManagerBase::DoUpdateAccountLocale( 1009 void UserManagerBase::DoUpdateAccountLocale(
1030 const std::string& user_id, 1010 const std::string& user_id,
1031 const std::string& resolved_locale) { 1011 const std::string& resolved_locale) {
1032 if (user_manager::User* user = FindUserAndModify(user_id)) 1012 if (User* user = FindUserAndModify(user_id))
1033 user->SetAccountLocale(resolved_locale); 1013 user->SetAccountLocale(resolved_locale);
1034 } 1014 }
1035 1015
1036 void UserManagerBase::DeleteUser(user_manager::User* user) { 1016 void UserManagerBase::DeleteUser(User* user) {
1037 const bool is_active_user = (user == active_user_); 1017 const bool is_active_user = (user == active_user_);
1038 delete user; 1018 delete user;
1039 if (is_active_user) 1019 if (is_active_user)
1040 active_user_ = NULL; 1020 active_user_ = NULL;
1041 } 1021 }
1042 1022
1043 } // namespace chromeos 1023 } // namespace user_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698