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

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

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 #include "chrome/browser/chromeos/login/users/user_manager_impl.h" 5 #include "chrome/browser/chromeos/login/users/user_manager_impl.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <set> 8 #include <set>
9 9
10 #include "ash/multi_profile_uma.h" 10 #include "ash/multi_profile_uma.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 #include "chrome/common/crash_keys.h" 52 #include "chrome/common/crash_keys.h"
53 #include "chrome/common/pref_names.h" 53 #include "chrome/common/pref_names.h"
54 #include "chromeos/chromeos_switches.h" 54 #include "chromeos/chromeos_switches.h"
55 #include "chromeos/cryptohome/async_method_caller.h" 55 #include "chromeos/cryptohome/async_method_caller.h"
56 #include "chromeos/dbus/dbus_thread_manager.h" 56 #include "chromeos/dbus/dbus_thread_manager.h"
57 #include "chromeos/login/auth/user_context.h" 57 #include "chromeos/login/auth/user_context.h"
58 #include "chromeos/login/login_state.h" 58 #include "chromeos/login/login_state.h"
59 #include "chromeos/login/user_names.h" 59 #include "chromeos/login/user_names.h"
60 #include "chromeos/settings/cros_settings_names.h" 60 #include "chromeos/settings/cros_settings_names.h"
61 #include "components/session_manager/core/session_manager.h" 61 #include "components/session_manager/core/session_manager.h"
62 #include "components/user_manager/user_image/user_image.h"
62 #include "components/user_manager/user_type.h" 63 #include "components/user_manager/user_type.h"
63 #include "content/public/browser/browser_thread.h" 64 #include "content/public/browser/browser_thread.h"
64 #include "content/public/browser/notification_service.h" 65 #include "content/public/browser/notification_service.h"
65 #include "google_apis/gaia/gaia_auth_util.h" 66 #include "google_apis/gaia/gaia_auth_util.h"
66 #include "google_apis/gaia/google_service_auth_error.h" 67 #include "google_apis/gaia/google_service_auth_error.h"
68 #include "grit/theme_resources.h"
67 #include "policy/policy_constants.h" 69 #include "policy/policy_constants.h"
68 #include "ui/base/l10n/l10n_util.h" 70 #include "ui/base/l10n/l10n_util.h"
71 #include "ui/base/resource/resource_bundle.h"
69 #include "ui/wm/core/wm_core_switches.h" 72 #include "ui/wm/core/wm_core_switches.h"
70 73
71 using content::BrowserThread; 74 using content::BrowserThread;
72 75
73 namespace chromeos { 76 namespace chromeos {
74 namespace { 77 namespace {
75 78
76 // A vector pref of the the regular users known on this device, arranged in LRU 79 // A vector pref of the the regular users known on this device, arranged in LRU
77 // order. 80 // order.
78 const char kRegularUsers[] = "LoggedInUsers"; 81 const char kRegularUsers[] = "LoggedInUsers";
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 connector->GetDeviceLocalAccountPolicyService(), 224 connector->GetDeviceLocalAccountPolicyService(),
222 policy::key::kWallpaperImage, 225 policy::key::kWallpaperImage,
223 this)); 226 this));
224 wallpaper_policy_observer_->Init(); 227 wallpaper_policy_observer_->Init();
225 228
226 UpdateLoginState(); 229 UpdateLoginState();
227 } 230 }
228 231
229 UserManagerImpl::~UserManagerImpl() { 232 UserManagerImpl::~UserManagerImpl() {
230 // Can't use STLDeleteElements because of the private destructor of User. 233 // Can't use STLDeleteElements because of the private destructor of User.
231 for (UserList::iterator it = users_.begin(); it != users_.end(); 234 for (user_manager::UserList::iterator it = users_.begin(); it != users_.end();
232 it = users_.erase(it)) { 235 it = users_.erase(it)) {
233 DeleteUser(*it); 236 DeleteUser(*it);
234 } 237 }
235 // These are pointers to the same User instances that were in users_ list. 238 // These are pointers to the same User instances that were in users_ list.
236 logged_in_users_.clear(); 239 logged_in_users_.clear();
237 lru_logged_in_users_.clear(); 240 lru_logged_in_users_.clear();
238 241
239 DeleteUser(active_user_); 242 DeleteUser(active_user_);
240 } 243 }
241 244
(...skipping 28 matching lines...) Expand all
270 return ui->second.get(); 273 return ui->second.get();
271 linked_ptr<UserImageManagerImpl> mgr(new UserImageManagerImpl(user_id, this)); 274 linked_ptr<UserImageManagerImpl> mgr(new UserImageManagerImpl(user_id, this));
272 user_image_managers_[user_id] = mgr; 275 user_image_managers_[user_id] = mgr;
273 return mgr.get(); 276 return mgr.get();
274 } 277 }
275 278
276 SupervisedUserManager* UserManagerImpl::GetSupervisedUserManager() { 279 SupervisedUserManager* UserManagerImpl::GetSupervisedUserManager() {
277 return supervised_user_manager_.get(); 280 return supervised_user_manager_.get();
278 } 281 }
279 282
280 const UserList& UserManagerImpl::GetUsers() const { 283 const user_manager::UserList& UserManagerImpl::GetUsers() const {
281 const_cast<UserManagerImpl*>(this)->EnsureUsersLoaded(); 284 const_cast<UserManagerImpl*>(this)->EnsureUsersLoaded();
282 return users_; 285 return users_;
283 } 286 }
284 287
285 UserList UserManagerImpl::GetUsersAdmittedForMultiProfile() const { 288 user_manager::UserList UserManagerImpl::GetUsersAdmittedForMultiProfile()
289 const {
286 // Supervised users are not allowed to use multi-profiles. 290 // Supervised users are not allowed to use multi-profiles.
287 if (logged_in_users_.size() == 1 && 291 if (logged_in_users_.size() == 1 &&
288 GetPrimaryUser()->GetType() != user_manager::USER_TYPE_REGULAR) { 292 GetPrimaryUser()->GetType() != user_manager::USER_TYPE_REGULAR) {
289 return UserList(); 293 return user_manager::UserList();
290 } 294 }
291 295
292 UserList result; 296 user_manager::UserList result;
293 const UserList& users = GetUsers(); 297 const user_manager::UserList& users = GetUsers();
294 for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) { 298 for (user_manager::UserList::const_iterator it = users.begin();
299 it != users.end();
300 ++it) {
295 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR && 301 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR &&
296 !(*it)->is_logged_in()) { 302 !(*it)->is_logged_in()) {
297 MultiProfileUserController::UserAllowedInSessionResult check = 303 MultiProfileUserController::UserAllowedInSessionResult check =
298 multi_profile_user_controller_-> 304 multi_profile_user_controller_->
299 IsUserAllowedInSession((*it)->email()); 305 IsUserAllowedInSession((*it)->email());
300 if (check == MultiProfileUserController:: 306 if (check == MultiProfileUserController::
301 NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS) { 307 NOT_ALLOWED_PRIMARY_USER_POLICY_FORBIDS) {
302 return UserList(); 308 return user_manager::UserList();
303 } 309 }
304 310
305 // Users with a policy that prevents them being added to a session will be 311 // Users with a policy that prevents them being added to a session will be
306 // shown in login UI but will be grayed out. 312 // shown in login UI but will be grayed out.
307 // Same applies to owner account (see http://crbug.com/385034). 313 // Same applies to owner account (see http://crbug.com/385034).
308 if (check == MultiProfileUserController::ALLOWED || 314 if (check == MultiProfileUserController::ALLOWED ||
309 check == MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS || 315 check == MultiProfileUserController::NOT_ALLOWED_POLICY_FORBIDS ||
310 check == MultiProfileUserController::NOT_ALLOWED_OWNER_AS_SECONDARY) { 316 check == MultiProfileUserController::NOT_ALLOWED_OWNER_AS_SECONDARY) {
311 result.push_back(*it); 317 result.push_back(*it);
312 } 318 }
313 } 319 }
314 } 320 }
315 321
316 return result; 322 return result;
317 } 323 }
318 324
319 const UserList& UserManagerImpl::GetLoggedInUsers() const { 325 const user_manager::UserList& UserManagerImpl::GetLoggedInUsers() const {
320 return logged_in_users_; 326 return logged_in_users_;
321 } 327 }
322 328
323 const UserList& UserManagerImpl::GetLRULoggedInUsers() { 329 const user_manager::UserList& UserManagerImpl::GetLRULoggedInUsers() {
324 // If there is no user logged in, we return the active user as the only one. 330 // If there is no user logged in, we return the active user as the only one.
325 if (lru_logged_in_users_.empty() && active_user_) { 331 if (lru_logged_in_users_.empty() && active_user_) {
326 temp_single_logged_in_users_.clear(); 332 temp_single_logged_in_users_.clear();
327 temp_single_logged_in_users_.insert(temp_single_logged_in_users_.begin(), 333 temp_single_logged_in_users_.insert(temp_single_logged_in_users_.begin(),
328 active_user_); 334 active_user_);
329 return temp_single_logged_in_users_; 335 return temp_single_logged_in_users_;
330 } 336 }
331 return lru_logged_in_users_; 337 return lru_logged_in_users_;
332 } 338 }
333 339
334 UserList UserManagerImpl::GetUnlockUsers() const { 340 user_manager::UserList UserManagerImpl::GetUnlockUsers() const {
335 const UserList& logged_in_users = GetLoggedInUsers(); 341 const user_manager::UserList& logged_in_users = GetLoggedInUsers();
336 if (logged_in_users.empty()) 342 if (logged_in_users.empty())
337 return UserList(); 343 return user_manager::UserList();
338 344
339 UserList unlock_users; 345 user_manager::UserList unlock_users;
340 Profile* profile = ProfileHelper::Get()->GetProfileByUser(primary_user_); 346 Profile* profile = ProfileHelper::Get()->GetProfileByUser(primary_user_);
341 std::string primary_behavior = 347 std::string primary_behavior =
342 profile->GetPrefs()->GetString(prefs::kMultiProfileUserBehavior); 348 profile->GetPrefs()->GetString(prefs::kMultiProfileUserBehavior);
343 349
344 // Specific case: only one logged in user or 350 // Specific case: only one logged in user or
345 // primary user has primary-only multi-profile policy. 351 // primary user has primary-only multi-profile policy.
346 if (logged_in_users.size() == 1 || 352 if (logged_in_users.size() == 1 ||
347 primary_behavior == MultiProfileUserController::kBehaviorPrimaryOnly) { 353 primary_behavior == MultiProfileUserController::kBehaviorPrimaryOnly) {
348 if (primary_user_->can_lock()) 354 if (primary_user_->can_lock())
349 unlock_users.push_back(primary_user_); 355 unlock_users.push_back(primary_user_);
350 } else { 356 } else {
351 // Fill list of potential unlock users based on multi-profile policy state. 357 // Fill list of potential unlock users based on multi-profile policy state.
352 for (UserList::const_iterator it = logged_in_users.begin(); 358 for (user_manager::UserList::const_iterator it = logged_in_users.begin();
353 it != logged_in_users.end(); ++it) { 359 it != logged_in_users.end();
354 User* user = (*it); 360 ++it) {
361 user_manager::User* user = (*it);
355 Profile* profile = ProfileHelper::Get()->GetProfileByUser(user); 362 Profile* profile = ProfileHelper::Get()->GetProfileByUser(user);
356 const std::string behavior = 363 const std::string behavior =
357 profile->GetPrefs()->GetString(prefs::kMultiProfileUserBehavior); 364 profile->GetPrefs()->GetString(prefs::kMultiProfileUserBehavior);
358 if (behavior == MultiProfileUserController::kBehaviorUnrestricted && 365 if (behavior == MultiProfileUserController::kBehaviorUnrestricted &&
359 user->can_lock()) { 366 user->can_lock()) {
360 unlock_users.push_back(user); 367 unlock_users.push_back(user);
361 } else if (behavior == MultiProfileUserController::kBehaviorPrimaryOnly) { 368 } else if (behavior == MultiProfileUserController::kBehaviorPrimaryOnly) {
362 NOTREACHED() 369 NOTREACHED()
363 << "Spotted primary-only multi-profile policy for non-primary user"; 370 << "Spotted primary-only multi-profile policy for non-primary user";
364 } 371 }
365 } 372 }
366 } 373 }
367 374
368 return unlock_users; 375 return unlock_users;
369 } 376 }
370 377
371 const std::string& UserManagerImpl::GetOwnerEmail() { 378 const std::string& UserManagerImpl::GetOwnerEmail() {
372 return owner_email_; 379 return owner_email_;
373 } 380 }
374 381
375 void UserManagerImpl::UserLoggedIn(const std::string& user_id, 382 void UserManagerImpl::UserLoggedIn(const std::string& user_id,
376 const std::string& username_hash, 383 const std::string& username_hash,
377 bool browser_restart) { 384 bool browser_restart) {
378 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 385 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
379 386
380 User* user = FindUserInListAndModify(user_id); 387 user_manager::User* user = FindUserInListAndModify(user_id);
381 if (active_user_ && user) { 388 if (active_user_ && user) {
382 user->set_is_logged_in(true); 389 user->set_is_logged_in(true);
383 user->set_username_hash(username_hash); 390 user->set_username_hash(username_hash);
384 logged_in_users_.push_back(user); 391 logged_in_users_.push_back(user);
385 lru_logged_in_users_.push_back(user); 392 lru_logged_in_users_.push_back(user);
386 // Reset the new user flag if the user already exists. 393 // Reset the new user flag if the user already exists.
387 is_current_user_new_ = false; 394 is_current_user_new_ = false;
388 NotifyUserAddedToSession(user); 395 NotifyUserAddedToSession(user);
389 // Remember that we need to switch to this user as soon as profile ready. 396 // Remember that we need to switch to this user as soon as profile ready.
390 pending_user_switch_ = user_id; 397 pending_user_switch_ = user_id;
(...skipping 18 matching lines...) Expand all
409 if (user && user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { 416 if (user && user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
410 PublicAccountUserLoggedIn(user); 417 PublicAccountUserLoggedIn(user);
411 } else if ((user && 418 } else if ((user &&
412 user->GetType() == user_manager::USER_TYPE_SUPERVISED) || 419 user->GetType() == user_manager::USER_TYPE_SUPERVISED) ||
413 (!user && 420 (!user &&
414 gaia::ExtractDomainName(user_id) == 421 gaia::ExtractDomainName(user_id) ==
415 chromeos::login::kSupervisedUserDomain)) { 422 chromeos::login::kSupervisedUserDomain)) {
416 SupervisedUserLoggedIn(user_id); 423 SupervisedUserLoggedIn(user_id);
417 } else if (browser_restart && user_id == g_browser_process->local_state()-> 424 } else if (browser_restart && user_id == g_browser_process->local_state()->
418 GetString(kPublicAccountPendingDataRemoval)) { 425 GetString(kPublicAccountPendingDataRemoval)) {
419 PublicAccountUserLoggedIn(User::CreatePublicAccountUser(user_id)); 426 PublicAccountUserLoggedIn(
427 user_manager::User::CreatePublicAccountUser(user_id));
420 } else if (user_id != owner_email_ && !user && 428 } else if (user_id != owner_email_ && !user &&
421 (AreEphemeralUsersEnabled() || browser_restart)) { 429 (AreEphemeralUsersEnabled() || browser_restart)) {
422 RegularUserLoggedInAsEphemeral(user_id); 430 RegularUserLoggedInAsEphemeral(user_id);
423 } else { 431 } else {
424 RegularUserLoggedIn(user_id); 432 RegularUserLoggedIn(user_id);
425 } 433 }
426 434
427 // Initialize the session length limiter and start it only if 435 // Initialize the session length limiter and start it only if
428 // session limit is defined by the policy. 436 // session limit is defined by the policy.
429 session_length_limiter_.reset(new SessionLengthLimiter(NULL, 437 session_length_limiter_.reset(new SessionLengthLimiter(NULL,
(...skipping 20 matching lines...) Expand all
450 458
451 g_browser_process->local_state()->SetString( 459 g_browser_process->local_state()->SetString(
452 kLastLoggedInRegularUser, 460 kLastLoggedInRegularUser,
453 (active_user_->GetType() == user_manager::USER_TYPE_REGULAR) ? user_id 461 (active_user_->GetType() == user_manager::USER_TYPE_REGULAR) ? user_id
454 : ""); 462 : "");
455 463
456 NotifyOnLogin(); 464 NotifyOnLogin();
457 } 465 }
458 466
459 void UserManagerImpl::SwitchActiveUser(const std::string& user_id) { 467 void UserManagerImpl::SwitchActiveUser(const std::string& user_id) {
460 User* user = FindUserAndModify(user_id); 468 user_manager::User* user = FindUserAndModify(user_id);
461 if (!user) { 469 if (!user) {
462 NOTREACHED() << "Switching to a non-existing user"; 470 NOTREACHED() << "Switching to a non-existing user";
463 return; 471 return;
464 } 472 }
465 if (user == active_user_) { 473 if (user == active_user_) {
466 NOTREACHED() << "Switching to a user who is already active"; 474 NOTREACHED() << "Switching to a user who is already active";
467 return; 475 return;
468 } 476 }
469 if (!user->is_logged_in()) { 477 if (!user->is_logged_in()) {
470 NOTREACHED() << "Switching to a user that is not logged in"; 478 NOTREACHED() << "Switching to a user that is not logged in";
(...skipping 24 matching lines...) Expand all
495 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 503 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
496 session_started_ = true; 504 session_started_ = true;
497 505
498 UpdateLoginState(); 506 UpdateLoginState();
499 g_browser_process->platform_part()->SessionManager()->SetSessionState( 507 g_browser_process->platform_part()->SessionManager()->SetSessionState(
500 session_manager::SESSION_STATE_ACTIVE); 508 session_manager::SESSION_STATE_ACTIVE);
501 509
502 content::NotificationService::current()->Notify( 510 content::NotificationService::current()->Notify(
503 chrome::NOTIFICATION_SESSION_STARTED, 511 chrome::NOTIFICATION_SESSION_STARTED,
504 content::Source<UserManager>(this), 512 content::Source<UserManager>(this),
505 content::Details<const User>(active_user_)); 513 content::Details<const user_manager::User>(active_user_));
506 if (is_current_user_new_) { 514 if (is_current_user_new_) {
507 // Make sure that the new user's data is persisted to Local State. 515 // Make sure that the new user's data is persisted to Local State.
508 g_browser_process->local_state()->CommitPendingWrite(); 516 g_browser_process->local_state()->CommitPendingWrite();
509 } 517 }
510 } 518 }
511 519
512 void UserManagerImpl::RemoveUser(const std::string& user_id, 520 void UserManagerImpl::RemoveUser(const std::string& user_id,
513 RemoveUserDelegate* delegate) { 521 RemoveUserDelegate* delegate) {
514 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 522 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
515 523
516 const User* user = FindUser(user_id); 524 const user_manager::User* user = FindUser(user_id);
517 if (!user || (user->GetType() != user_manager::USER_TYPE_REGULAR && 525 if (!user || (user->GetType() != user_manager::USER_TYPE_REGULAR &&
518 user->GetType() != user_manager::USER_TYPE_SUPERVISED)) 526 user->GetType() != user_manager::USER_TYPE_SUPERVISED))
519 return; 527 return;
520 528
521 // Sanity check: we must not remove single user unless it's an enterprise 529 // Sanity check: we must not remove single user unless it's an enterprise
522 // device. This check may seem redundant at a first sight because 530 // device. This check may seem redundant at a first sight because
523 // this single user must be an owner and we perform special check later 531 // this single user must be an owner and we perform special check later
524 // in order not to remove an owner. However due to non-instant nature of 532 // in order not to remove an owner. However due to non-instant nature of
525 // ownership assignment this later check may sometimes fail. 533 // ownership assignment this later check may sometimes fail.
526 // See http://crosbug.com/12723 534 // See http://crosbug.com/12723
527 policy::BrowserPolicyConnectorChromeOS* connector = 535 policy::BrowserPolicyConnectorChromeOS* connector =
528 g_browser_process->platform_part() 536 g_browser_process->platform_part()
529 ->browser_policy_connector_chromeos(); 537 ->browser_policy_connector_chromeos();
530 if (users_.size() < 2 && !connector->IsEnterpriseManaged()) 538 if (users_.size() < 2 && !connector->IsEnterpriseManaged())
531 return; 539 return;
532 540
533 // Sanity check: do not allow any of the the logged in users to be removed. 541 // Sanity check: do not allow any of the the logged in users to be removed.
534 for (UserList::const_iterator it = logged_in_users_.begin(); 542 for (user_manager::UserList::const_iterator it = logged_in_users_.begin();
535 it != logged_in_users_.end(); ++it) { 543 it != logged_in_users_.end();
544 ++it) {
536 if ((*it)->email() == user_id) 545 if ((*it)->email() == user_id)
537 return; 546 return;
538 } 547 }
539 548
540 RemoveUserInternal(user_id, delegate); 549 RemoveUserInternal(user_id, delegate);
541 } 550 }
542 551
543 void UserManagerImpl::RemoveUserInternal(const std::string& user_email, 552 void UserManagerImpl::RemoveUserInternal(const std::string& user_email,
544 RemoveUserDelegate* delegate) { 553 RemoveUserDelegate* delegate) {
545 CrosSettings* cros_settings = CrosSettings::Get(); 554 CrosSettings* cros_settings = CrosSettings::Get();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 return; 601 return;
593 } 602 }
594 // Make sure that new data is persisted to Local State. 603 // Make sure that new data is persisted to Local State.
595 g_browser_process->local_state()->CommitPendingWrite(); 604 g_browser_process->local_state()->CommitPendingWrite();
596 } 605 }
597 606
598 bool UserManagerImpl::IsKnownUser(const std::string& user_id) const { 607 bool UserManagerImpl::IsKnownUser(const std::string& user_id) const {
599 return FindUser(user_id) != NULL; 608 return FindUser(user_id) != NULL;
600 } 609 }
601 610
602 const User* UserManagerImpl::FindUser(const std::string& user_id) const { 611 const user_manager::User* UserManagerImpl::FindUser(
612 const std::string& user_id) const {
603 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 613 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
604 if (active_user_ && active_user_->email() == user_id) 614 if (active_user_ && active_user_->email() == user_id)
605 return active_user_; 615 return active_user_;
606 return FindUserInList(user_id); 616 return FindUserInList(user_id);
607 } 617 }
608 618
609 User* UserManagerImpl::FindUserAndModify(const std::string& user_id) { 619 user_manager::User* UserManagerImpl::FindUserAndModify(
620 const std::string& user_id) {
610 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 621 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
611 if (active_user_ && active_user_->email() == user_id) 622 if (active_user_ && active_user_->email() == user_id)
612 return active_user_; 623 return active_user_;
613 return FindUserInListAndModify(user_id); 624 return FindUserInListAndModify(user_id);
614 } 625 }
615 626
616 const User* UserManagerImpl::GetLoggedInUser() const { 627 const user_manager::User* UserManagerImpl::GetLoggedInUser() const {
617 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 628 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
618 return active_user_; 629 return active_user_;
619 } 630 }
620 631
621 User* UserManagerImpl::GetLoggedInUser() { 632 user_manager::User* UserManagerImpl::GetLoggedInUser() {
622 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 633 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
623 return active_user_; 634 return active_user_;
624 } 635 }
625 636
626 const User* UserManagerImpl::GetActiveUser() const { 637 const user_manager::User* UserManagerImpl::GetActiveUser() const {
627 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 638 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
628 return active_user_; 639 return active_user_;
629 } 640 }
630 641
631 User* UserManagerImpl::GetActiveUser() { 642 user_manager::User* UserManagerImpl::GetActiveUser() {
632 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 643 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
633 return active_user_; 644 return active_user_;
634 } 645 }
635 646
636 const User* UserManagerImpl::GetPrimaryUser() const { 647 const user_manager::User* UserManagerImpl::GetPrimaryUser() const {
637 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 648 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
638 return primary_user_; 649 return primary_user_;
639 } 650 }
640 651
641 void UserManagerImpl::SaveUserOAuthStatus( 652 void UserManagerImpl::SaveUserOAuthStatus(
642 const std::string& user_id, 653 const std::string& user_id,
643 User::OAuthTokenStatus oauth_token_status) { 654 user_manager::User::OAuthTokenStatus oauth_token_status) {
644 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 655 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
645 656
646 DVLOG(1) << "Saving user OAuth token status in Local State"; 657 DVLOG(1) << "Saving user OAuth token status in Local State";
647 User* user = FindUserAndModify(user_id); 658 user_manager::User* user = FindUserAndModify(user_id);
648 if (user) 659 if (user)
649 user->set_oauth_token_status(oauth_token_status); 660 user->set_oauth_token_status(oauth_token_status);
650 661
651 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(oauth_token_status); 662 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(oauth_token_status);
652 663
653 // Do not update local state if data stored or cached outside the user's 664 // Do not update local state if data stored or cached outside the user's
654 // cryptohome is to be treated as ephemeral. 665 // cryptohome is to be treated as ephemeral.
655 if (IsUserNonCryptohomeDataEphemeral(user_id)) 666 if (IsUserNonCryptohomeDataEphemeral(user_id))
656 return; 667 return;
657 668
(...skipping 16 matching lines...) Expand all
674 DictionaryPrefUpdate force_online_update(g_browser_process->local_state(), 685 DictionaryPrefUpdate force_online_update(g_browser_process->local_state(),
675 kUserForceOnlineSignin); 686 kUserForceOnlineSignin);
676 force_online_update->SetBooleanWithoutPathExpansion(user_id, 687 force_online_update->SetBooleanWithoutPathExpansion(user_id,
677 force_online_signin); 688 force_online_signin);
678 } 689 }
679 690
680 void UserManagerImpl::SaveUserDisplayName(const std::string& user_id, 691 void UserManagerImpl::SaveUserDisplayName(const std::string& user_id,
681 const base::string16& display_name) { 692 const base::string16& display_name) {
682 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 693 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
683 694
684 if (User* user = FindUserAndModify(user_id)) { 695 if (user_manager::User* user = FindUserAndModify(user_id)) {
685 user->set_display_name(display_name); 696 user->set_display_name(display_name);
686 697
687 // Do not update local state if data stored or cached outside the user's 698 // Do not update local state if data stored or cached outside the user's
688 // cryptohome is to be treated as ephemeral. 699 // cryptohome is to be treated as ephemeral.
689 if (!IsUserNonCryptohomeDataEphemeral(user_id)) { 700 if (!IsUserNonCryptohomeDataEphemeral(user_id)) {
690 PrefService* local_state = g_browser_process->local_state(); 701 PrefService* local_state = g_browser_process->local_state();
691 702
692 DictionaryPrefUpdate display_name_update(local_state, kUserDisplayName); 703 DictionaryPrefUpdate display_name_update(local_state, kUserDisplayName);
693 display_name_update->SetWithoutPathExpansion( 704 display_name_update->SetWithoutPathExpansion(
694 user_id, 705 user_id,
695 new base::StringValue(display_name)); 706 new base::StringValue(display_name));
696 707
697 supervised_user_manager_->UpdateManagerName(user_id, display_name); 708 supervised_user_manager_->UpdateManagerName(user_id, display_name);
698 } 709 }
699 } 710 }
700 } 711 }
701 712
702 base::string16 UserManagerImpl::GetUserDisplayName( 713 base::string16 UserManagerImpl::GetUserDisplayName(
703 const std::string& user_id) const { 714 const std::string& user_id) const {
704 const User* user = FindUser(user_id); 715 const user_manager::User* user = FindUser(user_id);
705 return user ? user->display_name() : base::string16(); 716 return user ? user->display_name() : base::string16();
706 } 717 }
707 718
708 void UserManagerImpl::SaveUserDisplayEmail(const std::string& user_id, 719 void UserManagerImpl::SaveUserDisplayEmail(const std::string& user_id,
709 const std::string& display_email) { 720 const std::string& display_email) {
710 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 721 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
711 722
712 User* user = FindUserAndModify(user_id); 723 user_manager::User* user = FindUserAndModify(user_id);
713 if (!user) 724 if (!user)
714 return; // Ignore if there is no such user. 725 return; // Ignore if there is no such user.
715 726
716 user->set_display_email(display_email); 727 user->set_display_email(display_email);
717 728
718 // Do not update local state if data stored or cached outside the user's 729 // Do not update local state if data stored or cached outside the user's
719 // cryptohome is to be treated as ephemeral. 730 // cryptohome is to be treated as ephemeral.
720 if (IsUserNonCryptohomeDataEphemeral(user_id)) 731 if (IsUserNonCryptohomeDataEphemeral(user_id))
721 return; 732 return;
722 733
723 PrefService* local_state = g_browser_process->local_state(); 734 PrefService* local_state = g_browser_process->local_state();
724 735
725 DictionaryPrefUpdate display_email_update(local_state, kUserDisplayEmail); 736 DictionaryPrefUpdate display_email_update(local_state, kUserDisplayEmail);
726 display_email_update->SetWithoutPathExpansion( 737 display_email_update->SetWithoutPathExpansion(
727 user_id, 738 user_id,
728 new base::StringValue(display_email)); 739 new base::StringValue(display_email));
729 } 740 }
730 741
731 std::string UserManagerImpl::GetUserDisplayEmail( 742 std::string UserManagerImpl::GetUserDisplayEmail(
732 const std::string& user_id) const { 743 const std::string& user_id) const {
733 const User* user = FindUser(user_id); 744 const user_manager::User* user = FindUser(user_id);
734 return user ? user->display_email() : user_id; 745 return user ? user->display_email() : user_id;
735 } 746 }
736 747
737 void UserManagerImpl::UpdateUserAccountData( 748 void UserManagerImpl::UpdateUserAccountData(
738 const std::string& user_id, 749 const std::string& user_id,
739 const UserAccountData& account_data) { 750 const UserAccountData& account_data) {
740 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 751 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
741 752
742 SaveUserDisplayName(user_id, account_data.display_name()); 753 SaveUserDisplayName(user_id, account_data.display_name());
743 754
744 if (User* user = FindUserAndModify(user_id)) { 755 if (user_manager::User* user = FindUserAndModify(user_id)) {
745 base::string16 given_name = account_data.given_name(); 756 base::string16 given_name = account_data.given_name();
746 user->set_given_name(given_name); 757 user->set_given_name(given_name);
747 if (!IsUserNonCryptohomeDataEphemeral(user_id)) { 758 if (!IsUserNonCryptohomeDataEphemeral(user_id)) {
748 PrefService* local_state = g_browser_process->local_state(); 759 PrefService* local_state = g_browser_process->local_state();
749 760
750 DictionaryPrefUpdate given_name_update(local_state, kUserGivenName); 761 DictionaryPrefUpdate given_name_update(local_state, kUserGivenName);
751 given_name_update->SetWithoutPathExpansion( 762 given_name_update->SetWithoutPathExpansion(
752 user_id, 763 user_id,
753 new base::StringValue(given_name)); 764 new base::StringValue(given_name));
754 } 765 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 AuthSyncObserver* sync_observer = 804 AuthSyncObserver* sync_observer =
794 AuthSyncObserverFactory::GetInstance()->GetForProfile(profile); 805 AuthSyncObserverFactory::GetInstance()->GetForProfile(profile);
795 sync_observer->StartObserving(); 806 sync_observer->StartObserving();
796 multi_profile_user_controller_->StartObserving(profile); 807 multi_profile_user_controller_->StartObserving(profile);
797 } 808 }
798 } 809 }
799 break; 810 break;
800 } 811 }
801 case chrome::NOTIFICATION_PROFILE_CREATED: { 812 case chrome::NOTIFICATION_PROFILE_CREATED: {
802 Profile* profile = content::Source<Profile>(source).ptr(); 813 Profile* profile = content::Source<Profile>(source).ptr();
803 User* user = ProfileHelper::Get()->GetUserByProfile(profile); 814 user_manager::User* user =
815 ProfileHelper::Get()->GetUserByProfile(profile);
804 if (user != NULL) 816 if (user != NULL)
805 user->set_profile_is_created(); 817 user->set_profile_is_created();
806 // If there is pending user switch, do it now. 818 // If there is pending user switch, do it now.
807 if (!pending_user_switch_.empty()) { 819 if (!pending_user_switch_.empty()) {
808 // Call SwitchActiveUser async because otherwise it may cause 820 // Call SwitchActiveUser async because otherwise it may cause
809 // ProfileManager::GetProfile before the profile gets registered 821 // ProfileManager::GetProfile before the profile gets registered
810 // in ProfileManager. It happens in case of sync profile load when 822 // in ProfileManager. It happens in case of sync profile load when
811 // NOTIFICATION_PROFILE_CREATED is called synchronously. 823 // NOTIFICATION_PROFILE_CREATED is called synchronously.
812 base::MessageLoop::current()->PostTask(FROM_HERE, 824 base::MessageLoop::current()->PostTask(FROM_HERE,
813 base::Bind(&UserManagerImpl::SwitchActiveUser, 825 base::Bind(&UserManagerImpl::SwitchActiveUser,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 scoped_ptr<std::string> data) { 859 scoped_ptr<std::string> data) {
848 if (policy == policy::key::kUserAvatarImage) 860 if (policy == policy::key::kUserAvatarImage)
849 GetUserImageManager(user_id)->OnExternalDataFetched(policy, data.Pass()); 861 GetUserImageManager(user_id)->OnExternalDataFetched(policy, data.Pass());
850 else if (policy == policy::key::kWallpaperImage) 862 else if (policy == policy::key::kWallpaperImage)
851 WallpaperManager::Get()->OnPolicyFetched(policy, user_id, data.Pass()); 863 WallpaperManager::Get()->OnPolicyFetched(policy, user_id, data.Pass());
852 else 864 else
853 NOTREACHED(); 865 NOTREACHED();
854 } 866 }
855 867
856 void UserManagerImpl::OnPolicyUpdated(const std::string& user_id) { 868 void UserManagerImpl::OnPolicyUpdated(const std::string& user_id) {
857 const User* user = FindUserInList(user_id); 869 const user_manager::User* user = FindUserInList(user_id);
858 if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) 870 if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
859 return; 871 return;
860 UpdatePublicAccountDisplayName(user_id); 872 UpdatePublicAccountDisplayName(user_id);
861 NotifyUserListChanged(); 873 NotifyUserListChanged();
862 } 874 }
863 875
864 void UserManagerImpl::OnDeviceLocalAccountsChanged() { 876 void UserManagerImpl::OnDeviceLocalAccountsChanged() {
865 // No action needed here, changes to the list of device-local accounts get 877 // No action needed here, changes to the list of device-local accounts get
866 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer. 878 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer.
867 } 879 }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 const base::DictionaryValue* prefs_display_emails = 1051 const base::DictionaryValue* prefs_display_emails =
1040 local_state->GetDictionary(kUserDisplayEmail); 1052 local_state->GetDictionary(kUserDisplayEmail);
1041 1053
1042 // Load public sessions first. 1054 // Load public sessions first.
1043 std::vector<std::string> public_sessions; 1055 std::vector<std::string> public_sessions;
1044 std::set<std::string> public_sessions_set; 1056 std::set<std::string> public_sessions_set;
1045 ParseUserList(*prefs_public_sessions, std::set<std::string>(), 1057 ParseUserList(*prefs_public_sessions, std::set<std::string>(),
1046 &public_sessions, &public_sessions_set); 1058 &public_sessions, &public_sessions_set);
1047 for (std::vector<std::string>::const_iterator it = public_sessions.begin(); 1059 for (std::vector<std::string>::const_iterator it = public_sessions.begin();
1048 it != public_sessions.end(); ++it) { 1060 it != public_sessions.end(); ++it) {
1049 users_.push_back(User::CreatePublicAccountUser(*it)); 1061 users_.push_back(user_manager::User::CreatePublicAccountUser(*it));
1050 UpdatePublicAccountDisplayName(*it); 1062 UpdatePublicAccountDisplayName(*it);
1051 } 1063 }
1052 1064
1053 // Load regular users and supervised users. 1065 // Load regular users and supervised users.
1054 std::vector<std::string> regular_users; 1066 std::vector<std::string> regular_users;
1055 std::set<std::string> regular_users_set; 1067 std::set<std::string> regular_users_set;
1056 ParseUserList(*prefs_regular_users, public_sessions_set, 1068 ParseUserList(*prefs_regular_users, public_sessions_set,
1057 &regular_users, &regular_users_set); 1069 &regular_users, &regular_users_set);
1058 for (std::vector<std::string>::const_iterator it = regular_users.begin(); 1070 for (std::vector<std::string>::const_iterator it = regular_users.begin();
1059 it != regular_users.end(); ++it) { 1071 it != regular_users.end(); ++it) {
1060 User* user = NULL; 1072 user_manager::User* user = NULL;
1061 const std::string domain = gaia::ExtractDomainName(*it); 1073 const std::string domain = gaia::ExtractDomainName(*it);
1062 if (domain == chromeos::login::kSupervisedUserDomain) 1074 if (domain == chromeos::login::kSupervisedUserDomain)
1063 user = User::CreateSupervisedUser(*it); 1075 user = user_manager::User::CreateSupervisedUser(*it);
1064 else 1076 else
1065 user = User::CreateRegularUser(*it); 1077 user = user_manager::User::CreateRegularUser(*it);
1066 user->set_oauth_token_status(LoadUserOAuthStatus(*it)); 1078 user->set_oauth_token_status(LoadUserOAuthStatus(*it));
1067 user->set_force_online_signin(LoadForceOnlineSignin(*it)); 1079 user->set_force_online_signin(LoadForceOnlineSignin(*it));
1068 users_.push_back(user); 1080 users_.push_back(user);
1069 1081
1070 base::string16 display_name; 1082 base::string16 display_name;
1071 if (prefs_display_names->GetStringWithoutPathExpansion(*it, 1083 if (prefs_display_names->GetStringWithoutPathExpansion(*it,
1072 &display_name)) { 1084 &display_name)) {
1073 user->set_display_name(display_name); 1085 user->set_display_name(display_name);
1074 } 1086 }
1075 1087
1076 base::string16 given_name; 1088 base::string16 given_name;
1077 if (prefs_given_names->GetStringWithoutPathExpansion(*it, &given_name)) { 1089 if (prefs_given_names->GetStringWithoutPathExpansion(*it, &given_name)) {
1078 user->set_given_name(given_name); 1090 user->set_given_name(given_name);
1079 } 1091 }
1080 1092
1081 std::string display_email; 1093 std::string display_email;
1082 if (prefs_display_emails->GetStringWithoutPathExpansion(*it, 1094 if (prefs_display_emails->GetStringWithoutPathExpansion(*it,
1083 &display_email)) { 1095 &display_email)) {
1084 user->set_display_email(display_email); 1096 user->set_display_email(display_email);
1085 } 1097 }
1086 } 1098 }
1087 1099
1088 user_loading_stage_ = STAGE_LOADED; 1100 user_loading_stage_ = STAGE_LOADED;
1089 1101
1090 for (UserList::iterator ui = users_.begin(), ue = users_.end(); 1102 for (user_manager::UserList::iterator ui = users_.begin(), ue = users_.end();
1091 ui != ue; ++ui) { 1103 ui != ue;
1104 ++ui) {
1092 GetUserImageManager((*ui)->email())->LoadUserImage(); 1105 GetUserImageManager((*ui)->email())->LoadUserImage();
1093 } 1106 }
1094 } 1107 }
1095 1108
1096 void UserManagerImpl::RetrieveTrustedDevicePolicies() { 1109 void UserManagerImpl::RetrieveTrustedDevicePolicies() {
1097 ephemeral_users_enabled_ = false; 1110 ephemeral_users_enabled_ = false;
1098 owner_email_.clear(); 1111 owner_email_.clear();
1099 1112
1100 // Schedule a callback if device policy has not yet been verified. 1113 // Schedule a callback if device policy has not yet been verified.
1101 if (CrosSettingsProvider::TRUSTED != cros_settings_->PrepareTrustedValues( 1114 if (CrosSettingsProvider::TRUSTED != cros_settings_->PrepareTrustedValues(
(...skipping 10 matching lines...) Expand all
1112 1125
1113 bool changed = UpdateAndCleanUpPublicAccounts( 1126 bool changed = UpdateAndCleanUpPublicAccounts(
1114 policy::GetDeviceLocalAccounts(cros_settings_)); 1127 policy::GetDeviceLocalAccounts(cros_settings_));
1115 1128
1116 // If ephemeral users are enabled and we are on the login screen, take this 1129 // If ephemeral users are enabled and we are on the login screen, take this
1117 // opportunity to clean up by removing all regular users except the owner. 1130 // opportunity to clean up by removing all regular users except the owner.
1118 if (ephemeral_users_enabled_ && !IsUserLoggedIn()) { 1131 if (ephemeral_users_enabled_ && !IsUserLoggedIn()) {
1119 ListPrefUpdate prefs_users_update(g_browser_process->local_state(), 1132 ListPrefUpdate prefs_users_update(g_browser_process->local_state(),
1120 kRegularUsers); 1133 kRegularUsers);
1121 prefs_users_update->Clear(); 1134 prefs_users_update->Clear();
1122 for (UserList::iterator it = users_.begin(); it != users_.end(); ) { 1135 for (user_manager::UserList::iterator it = users_.begin();
1136 it != users_.end();) {
1123 const std::string user_email = (*it)->email(); 1137 const std::string user_email = (*it)->email();
1124 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR && 1138 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR &&
1125 user_email != owner_email_) { 1139 user_email != owner_email_) {
1126 RemoveNonCryptohomeData(user_email); 1140 RemoveNonCryptohomeData(user_email);
1127 DeleteUser(*it); 1141 DeleteUser(*it);
1128 it = users_.erase(it); 1142 it = users_.erase(it);
1129 changed = true; 1143 changed = true;
1130 } else { 1144 } else {
1131 if ((*it)->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) 1145 if ((*it)->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
1132 prefs_users_update->Append(new base::StringValue(user_email)); 1146 prefs_users_update->Append(new base::StringValue(user_email));
1133 ++it; 1147 ++it;
1134 } 1148 }
1135 } 1149 }
1136 } 1150 }
1137 1151
1138 if (changed) 1152 if (changed)
1139 NotifyUserListChanged(); 1153 NotifyUserListChanged();
1140 } 1154 }
1141 1155
1142 bool UserManagerImpl::AreEphemeralUsersEnabled() const { 1156 bool UserManagerImpl::AreEphemeralUsersEnabled() const {
1143 policy::BrowserPolicyConnectorChromeOS* connector = 1157 policy::BrowserPolicyConnectorChromeOS* connector =
1144 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1158 g_browser_process->platform_part()->browser_policy_connector_chromeos();
1145 return ephemeral_users_enabled_ && 1159 return ephemeral_users_enabled_ &&
1146 (connector->IsEnterpriseManaged() || !owner_email_.empty()); 1160 (connector->IsEnterpriseManaged() || !owner_email_.empty());
1147 } 1161 }
1148 1162
1149 UserList& UserManagerImpl::GetUsersAndModify() { 1163 user_manager::UserList& UserManagerImpl::GetUsersAndModify() {
1150 EnsureUsersLoaded(); 1164 EnsureUsersLoaded();
1151 return users_; 1165 return users_;
1152 } 1166 }
1153 1167
1154 const User* UserManagerImpl::FindUserInList(const std::string& user_id) const { 1168 const user_manager::User* UserManagerImpl::FindUserInList(
1155 const UserList& users = GetUsers(); 1169 const std::string& user_id) const {
1156 for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) { 1170 const user_manager::UserList& users = GetUsers();
1171 for (user_manager::UserList::const_iterator it = users.begin();
1172 it != users.end();
1173 ++it) {
1157 if ((*it)->email() == user_id) 1174 if ((*it)->email() == user_id)
1158 return *it; 1175 return *it;
1159 } 1176 }
1160 return NULL; 1177 return NULL;
1161 } 1178 }
1162 1179
1163 const bool UserManagerImpl::UserExistsInList(const std::string& user_id) const { 1180 const bool UserManagerImpl::UserExistsInList(const std::string& user_id) const {
1164 PrefService* local_state = g_browser_process->local_state(); 1181 PrefService* local_state = g_browser_process->local_state();
1165 const base::ListValue* user_list = local_state->GetList(kRegularUsers); 1182 const base::ListValue* user_list = local_state->GetList(kRegularUsers);
1166 for (size_t i = 0; i < user_list->GetSize(); ++i) { 1183 for (size_t i = 0; i < user_list->GetSize(); ++i) {
1167 std::string email; 1184 std::string email;
1168 if (user_list->GetString(i, &email) && (user_id == email)) 1185 if (user_list->GetString(i, &email) && (user_id == email))
1169 return true; 1186 return true;
1170 } 1187 }
1171 return false; 1188 return false;
1172 } 1189 }
1173 1190
1174 User* UserManagerImpl::FindUserInListAndModify(const std::string& user_id) { 1191 user_manager::User* UserManagerImpl::FindUserInListAndModify(
1175 UserList& users = GetUsersAndModify(); 1192 const std::string& user_id) {
1176 for (UserList::iterator it = users.begin(); it != users.end(); ++it) { 1193 user_manager::UserList& users = GetUsersAndModify();
1194 for (user_manager::UserList::iterator it = users.begin(); it != users.end();
1195 ++it) {
1177 if ((*it)->email() == user_id) 1196 if ((*it)->email() == user_id)
1178 return *it; 1197 return *it;
1179 } 1198 }
1180 return NULL; 1199 return NULL;
1181 } 1200 }
1182 1201
1183 void UserManagerImpl::GuestUserLoggedIn() { 1202 void UserManagerImpl::GuestUserLoggedIn() {
1184 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1203 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1185 active_user_ = User::CreateGuestUser(); 1204 active_user_ = user_manager::User::CreateGuestUser();
1186 // TODO(nkostylev): Add support for passing guest session cryptohome 1205 // TODO(nkostylev): Add support for passing guest session cryptohome
1187 // mount point. Legacy (--login-profile) value will be used for now. 1206 // mount point. Legacy (--login-profile) value will be used for now.
1188 // http://crosbug.com/230859 1207 // http://crosbug.com/230859
1189 active_user_->SetStubImage(User::kInvalidImageIndex, false); 1208 active_user_->SetStubImage(
1209 user_manager::UserImage(
1210 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
1211 IDR_PROFILE_PICTURE_LOADING)),
1212 user_manager::User::USER_IMAGE_INVALID,
1213 false);
1190 // Initializes wallpaper after active_user_ is set. 1214 // Initializes wallpaper after active_user_ is set.
1191 WallpaperManager::Get()->SetUserWallpaperNow(chromeos::login::kGuestUserName); 1215 WallpaperManager::Get()->SetUserWallpaperNow(chromeos::login::kGuestUserName);
1192 } 1216 }
1193 1217
1194 void UserManagerImpl::AddUserRecord(User* user) { 1218 void UserManagerImpl::AddUserRecord(user_manager::User* user) {
1195 // Add the user to the front of the user list. 1219 // Add the user to the front of the user list.
1196 ListPrefUpdate prefs_users_update(g_browser_process->local_state(), 1220 ListPrefUpdate prefs_users_update(g_browser_process->local_state(),
1197 kRegularUsers); 1221 kRegularUsers);
1198 prefs_users_update->Insert(0, new base::StringValue(user->email())); 1222 prefs_users_update->Insert(0, new base::StringValue(user->email()));
1199 users_.insert(users_.begin(), user); 1223 users_.insert(users_.begin(), user);
1200 } 1224 }
1201 1225
1202 void UserManagerImpl::RegularUserLoggedIn(const std::string& user_id) { 1226 void UserManagerImpl::RegularUserLoggedIn(const std::string& user_id) {
1203 // Remove the user from the user list. 1227 // Remove the user from the user list.
1204 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id); 1228 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id);
1205 1229
1206 // If the user was not found on the user list, create a new user. 1230 // If the user was not found on the user list, create a new user.
1207 is_current_user_new_ = !active_user_; 1231 is_current_user_new_ = !active_user_;
1208 if (!active_user_) { 1232 if (!active_user_) {
1209 active_user_ = User::CreateRegularUser(user_id); 1233 active_user_ = user_manager::User::CreateRegularUser(user_id);
1210 active_user_->set_oauth_token_status(LoadUserOAuthStatus(user_id)); 1234 active_user_->set_oauth_token_status(LoadUserOAuthStatus(user_id));
1211 SaveUserDisplayName(active_user_->email(), 1235 SaveUserDisplayName(active_user_->email(),
1212 base::UTF8ToUTF16(active_user_->GetAccountName(true))); 1236 base::UTF8ToUTF16(active_user_->GetAccountName(true)));
1213 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 1237 WallpaperManager::Get()->SetUserWallpaperNow(user_id);
1214 } 1238 }
1215 1239
1216 AddUserRecord(active_user_); 1240 AddUserRecord(active_user_);
1217 1241
1218 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, false); 1242 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, false);
1219 1243
1220 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 1244 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
1221 1245
1222 // Make sure that new data is persisted to Local State. 1246 // Make sure that new data is persisted to Local State.
1223 g_browser_process->local_state()->CommitPendingWrite(); 1247 g_browser_process->local_state()->CommitPendingWrite();
1224 } 1248 }
1225 1249
1226 void UserManagerImpl::RegularUserLoggedInAsEphemeral( 1250 void UserManagerImpl::RegularUserLoggedInAsEphemeral(
1227 const std::string& user_id) { 1251 const std::string& user_id) {
1228 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1252 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1229 is_current_user_new_ = true; 1253 is_current_user_new_ = true;
1230 is_current_user_ephemeral_regular_user_ = true; 1254 is_current_user_ephemeral_regular_user_ = true;
1231 active_user_ = User::CreateRegularUser(user_id); 1255 active_user_ = user_manager::User::CreateRegularUser(user_id);
1232 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, false); 1256 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, false);
1233 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 1257 WallpaperManager::Get()->SetUserWallpaperNow(user_id);
1234 } 1258 }
1235 1259
1236 void UserManagerImpl::SupervisedUserLoggedIn( 1260 void UserManagerImpl::SupervisedUserLoggedIn(
1237 const std::string& user_id) { 1261 const std::string& user_id) {
1238 // TODO(nkostylev): Refactor, share code with RegularUserLoggedIn(). 1262 // TODO(nkostylev): Refactor, share code with RegularUserLoggedIn().
1239 1263
1240 // Remove the user from the user list. 1264 // Remove the user from the user list.
1241 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id); 1265 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id);
1242 // If the user was not found on the user list, create a new user. 1266 // If the user was not found on the user list, create a new user.
1243 if (!active_user_) { 1267 if (!active_user_) {
1244 is_current_user_new_ = true; 1268 is_current_user_new_ = true;
1245 active_user_ = User::CreateSupervisedUser(user_id); 1269 active_user_ = user_manager::User::CreateSupervisedUser(user_id);
1246 // Leaving OAuth token status at the default state = unknown. 1270 // Leaving OAuth token status at the default state = unknown.
1247 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 1271 WallpaperManager::Get()->SetUserWallpaperNow(user_id);
1248 } else { 1272 } else {
1249 if (supervised_user_manager_->CheckForFirstRun(user_id)) { 1273 if (supervised_user_manager_->CheckForFirstRun(user_id)) {
1250 is_current_user_new_ = true; 1274 is_current_user_new_ = true;
1251 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 1275 WallpaperManager::Get()->SetUserWallpaperNow(user_id);
1252 } else { 1276 } else {
1253 is_current_user_new_ = false; 1277 is_current_user_new_ = false;
1254 } 1278 }
1255 } 1279 }
(...skipping 10 matching lines...) Expand all
1266 active_user_->GetDisplayName()); 1290 active_user_->GetDisplayName());
1267 } 1291 }
1268 1292
1269 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, true); 1293 GetUserImageManager(user_id)->UserLoggedIn(is_current_user_new_, true);
1270 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 1294 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
1271 1295
1272 // Make sure that new data is persisted to Local State. 1296 // Make sure that new data is persisted to Local State.
1273 g_browser_process->local_state()->CommitPendingWrite(); 1297 g_browser_process->local_state()->CommitPendingWrite();
1274 } 1298 }
1275 1299
1276 void UserManagerImpl::PublicAccountUserLoggedIn(User* user) { 1300 void UserManagerImpl::PublicAccountUserLoggedIn(user_manager::User* user) {
1277 is_current_user_new_ = true; 1301 is_current_user_new_ = true;
1278 active_user_ = user; 1302 active_user_ = user;
1279 // The UserImageManager chooses a random avatar picture when a user logs in 1303 // The UserImageManager chooses a random avatar picture when a user logs in
1280 // for the first time. Tell the UserImageManager that this user is not new to 1304 // for the first time. Tell the UserImageManager that this user is not new to
1281 // prevent the avatar from getting changed. 1305 // prevent the avatar from getting changed.
1282 GetUserImageManager(user->email())->UserLoggedIn(false, true); 1306 GetUserImageManager(user->email())->UserLoggedIn(false, true);
1283 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 1307 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
1284 } 1308 }
1285 1309
1286 void UserManagerImpl::KioskAppLoggedIn(const std::string& app_id) { 1310 void UserManagerImpl::KioskAppLoggedIn(const std::string& app_id) {
1287 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1311 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1288 policy::DeviceLocalAccount::Type device_local_account_type; 1312 policy::DeviceLocalAccount::Type device_local_account_type;
1289 DCHECK(policy::IsDeviceLocalAccountUser(app_id, 1313 DCHECK(policy::IsDeviceLocalAccountUser(app_id,
1290 &device_local_account_type)); 1314 &device_local_account_type));
1291 DCHECK_EQ(policy::DeviceLocalAccount::TYPE_KIOSK_APP, 1315 DCHECK_EQ(policy::DeviceLocalAccount::TYPE_KIOSK_APP,
1292 device_local_account_type); 1316 device_local_account_type);
1293 1317
1294 active_user_ = User::CreateKioskAppUser(app_id); 1318 active_user_ = user_manager::User::CreateKioskAppUser(app_id);
1295 active_user_->SetStubImage(User::kInvalidImageIndex, false); 1319 active_user_->SetStubImage(
1320 user_manager::UserImage(
1321 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
1322 IDR_PROFILE_PICTURE_LOADING)),
1323 user_manager::User::USER_IMAGE_INVALID,
1324 false);
1296 1325
1297 WallpaperManager::Get()->SetUserWallpaperNow(app_id); 1326 WallpaperManager::Get()->SetUserWallpaperNow(app_id);
1298 1327
1299 // TODO(bartfab): Add KioskAppUsers to the users_ list and keep metadata like 1328 // TODO(bartfab): Add KioskAppUsers to the users_ list and keep metadata like
1300 // the kiosk_app_id in these objects, removing the need to re-parse the 1329 // the kiosk_app_id in these objects, removing the need to re-parse the
1301 // device-local account list here to extract the kiosk_app_id. 1330 // device-local account list here to extract the kiosk_app_id.
1302 const std::vector<policy::DeviceLocalAccount> device_local_accounts = 1331 const std::vector<policy::DeviceLocalAccount> device_local_accounts =
1303 policy::GetDeviceLocalAccounts(cros_settings_); 1332 policy::GetDeviceLocalAccounts(cros_settings_);
1304 const policy::DeviceLocalAccount* account = NULL; 1333 const policy::DeviceLocalAccount* account = NULL;
1305 for (std::vector<policy::DeviceLocalAccount>::const_iterator 1334 for (std::vector<policy::DeviceLocalAccount>::const_iterator
(...skipping 17 matching lines...) Expand all
1323 command_line->AppendSwitchASCII(::switches::kAppId, kiosk_app_id); 1352 command_line->AppendSwitchASCII(::switches::kAppId, kiosk_app_id);
1324 1353
1325 // Disable window animation since kiosk app runs in a single full screen 1354 // Disable window animation since kiosk app runs in a single full screen
1326 // window and window animation causes start-up janks. 1355 // window and window animation causes start-up janks.
1327 command_line->AppendSwitch( 1356 command_line->AppendSwitch(
1328 wm::switches::kWindowAnimationsDisabled); 1357 wm::switches::kWindowAnimationsDisabled);
1329 } 1358 }
1330 1359
1331 void UserManagerImpl::DemoAccountLoggedIn() { 1360 void UserManagerImpl::DemoAccountLoggedIn() {
1332 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1333 active_user_ = User::CreateKioskAppUser(DemoAppLauncher::kDemoUserName); 1362 active_user_ =
1334 active_user_->SetStubImage(User::kInvalidImageIndex, false); 1363 user_manager::User::CreateKioskAppUser(DemoAppLauncher::kDemoUserName);
1364 active_user_->SetStubImage(
1365 user_manager::UserImage(
1366 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
1367 IDR_PROFILE_PICTURE_LOADING)),
1368 user_manager::User::USER_IMAGE_INVALID,
1369 false);
1335 WallpaperManager::Get()->SetUserWallpaperNow(DemoAppLauncher::kDemoUserName); 1370 WallpaperManager::Get()->SetUserWallpaperNow(DemoAppLauncher::kDemoUserName);
1336 1371
1337 CommandLine* command_line = CommandLine::ForCurrentProcess(); 1372 CommandLine* command_line = CommandLine::ForCurrentProcess();
1338 command_line->AppendSwitch(::switches::kForceAppMode); 1373 command_line->AppendSwitch(::switches::kForceAppMode);
1339 command_line->AppendSwitchASCII(::switches::kAppId, 1374 command_line->AppendSwitchASCII(::switches::kAppId,
1340 DemoAppLauncher::kDemoAppId); 1375 DemoAppLauncher::kDemoAppId);
1341 1376
1342 // Disable window animation since the demo app runs in a single full screen 1377 // Disable window animation since the demo app runs in a single full screen
1343 // window and window animation causes start-up janks. 1378 // window and window animation causes start-up janks.
1344 CommandLine::ForCurrentProcess()->AppendSwitch( 1379 CommandLine::ForCurrentProcess()->AppendSwitch(
1345 wm::switches::kWindowAnimationsDisabled); 1380 wm::switches::kWindowAnimationsDisabled);
1346 } 1381 }
1347 1382
1348 void UserManagerImpl::RetailModeUserLoggedIn() { 1383 void UserManagerImpl::RetailModeUserLoggedIn() {
1349 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1384 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1350 is_current_user_new_ = true; 1385 is_current_user_new_ = true;
1351 active_user_ = User::CreateRetailModeUser(); 1386 active_user_ = user_manager::User::CreateRetailModeUser();
1352 GetUserImageManager(chromeos::login::kRetailModeUserName) 1387 GetUserImageManager(chromeos::login::kRetailModeUserName)
1353 ->UserLoggedIn(is_current_user_new_, true); 1388 ->UserLoggedIn(is_current_user_new_, true);
1354 WallpaperManager::Get()->SetUserWallpaperNow( 1389 WallpaperManager::Get()->SetUserWallpaperNow(
1355 chromeos::login::kRetailModeUserName); 1390 chromeos::login::kRetailModeUserName);
1356 } 1391 }
1357 1392
1358 void UserManagerImpl::NotifyOnLogin() { 1393 void UserManagerImpl::NotifyOnLogin() {
1359 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1394 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1360 1395
1361 UserSessionManager::OverrideHomedir(); 1396 UserSessionManager::OverrideHomedir();
1362 1397
1363 UpdateNumberOfUsers(); 1398 UpdateNumberOfUsers();
1364 NotifyActiveUserHashChanged(active_user_->username_hash()); 1399 NotifyActiveUserHashChanged(active_user_->username_hash());
1365 NotifyActiveUserChanged(active_user_); 1400 NotifyActiveUserChanged(active_user_);
1366 UpdateLoginState(); 1401 UpdateLoginState();
1367 1402
1368 // TODO(nkostylev): Deprecate this notification in favor of 1403 // TODO(nkostylev): Deprecate this notification in favor of
1369 // ActiveUserChanged() observer call. 1404 // ActiveUserChanged() observer call.
1370 content::NotificationService::current()->Notify( 1405 content::NotificationService::current()->Notify(
1371 chrome::NOTIFICATION_LOGIN_USER_CHANGED, 1406 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
1372 content::Source<UserManager>(this), 1407 content::Source<UserManager>(this),
1373 content::Details<const User>(active_user_)); 1408 content::Details<const user_manager::User>(active_user_));
1374 1409
1375 UserSessionManager::GetInstance()->PerformPostUserLoggedInActions(); 1410 UserSessionManager::GetInstance()->PerformPostUserLoggedInActions();
1376 } 1411 }
1377 1412
1378 User::OAuthTokenStatus UserManagerImpl::LoadUserOAuthStatus( 1413 user_manager::User::OAuthTokenStatus UserManagerImpl::LoadUserOAuthStatus(
1379 const std::string& user_id) const { 1414 const std::string& user_id) const {
1380 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1415 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1381 1416
1382 PrefService* local_state = g_browser_process->local_state(); 1417 PrefService* local_state = g_browser_process->local_state();
1383 const base::DictionaryValue* prefs_oauth_status = 1418 const base::DictionaryValue* prefs_oauth_status =
1384 local_state->GetDictionary(kUserOAuthTokenStatus); 1419 local_state->GetDictionary(kUserOAuthTokenStatus);
1385 int oauth_token_status = User::OAUTH_TOKEN_STATUS_UNKNOWN; 1420 int oauth_token_status = user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN;
1386 if (prefs_oauth_status && 1421 if (prefs_oauth_status &&
1387 prefs_oauth_status->GetIntegerWithoutPathExpansion( 1422 prefs_oauth_status->GetIntegerWithoutPathExpansion(
1388 user_id, &oauth_token_status)) { 1423 user_id, &oauth_token_status)) {
1389 User::OAuthTokenStatus result = 1424 user_manager::User::OAuthTokenStatus result =
1390 static_cast<User::OAuthTokenStatus>(oauth_token_status); 1425 static_cast<user_manager::User::OAuthTokenStatus>(oauth_token_status);
1391 if (result == User::OAUTH2_TOKEN_STATUS_INVALID) 1426 if (result == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID)
1392 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(result); 1427 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(result);
1393 return result; 1428 return result;
1394 } 1429 }
1395 return User::OAUTH_TOKEN_STATUS_UNKNOWN; 1430 return user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN;
1396 } 1431 }
1397 1432
1398 bool UserManagerImpl::LoadForceOnlineSignin(const std::string& user_id) const { 1433 bool UserManagerImpl::LoadForceOnlineSignin(const std::string& user_id) const {
1399 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1400 1435
1401 PrefService* local_state = g_browser_process->local_state(); 1436 PrefService* local_state = g_browser_process->local_state();
1402 const base::DictionaryValue* prefs_force_online = 1437 const base::DictionaryValue* prefs_force_online =
1403 local_state->GetDictionary(kUserForceOnlineSignin); 1438 local_state->GetDictionary(kUserForceOnlineSignin);
1404 bool force_online_signin = false; 1439 bool force_online_signin = false;
1405 if (prefs_force_online) { 1440 if (prefs_force_online) {
(...skipping 28 matching lines...) Expand all
1434 prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL); 1469 prefs_oauth_update->RemoveWithoutPathExpansion(user_id, NULL);
1435 1470
1436 DictionaryPrefUpdate prefs_force_online_update(prefs, kUserForceOnlineSignin); 1471 DictionaryPrefUpdate prefs_force_online_update(prefs, kUserForceOnlineSignin);
1437 prefs_force_online_update->RemoveWithoutPathExpansion(user_id, NULL); 1472 prefs_force_online_update->RemoveWithoutPathExpansion(user_id, NULL);
1438 1473
1439 supervised_user_manager_->RemoveNonCryptohomeData(user_id); 1474 supervised_user_manager_->RemoveNonCryptohomeData(user_id);
1440 1475
1441 multi_profile_user_controller_->RemoveCachedValues(user_id); 1476 multi_profile_user_controller_->RemoveCachedValues(user_id);
1442 } 1477 }
1443 1478
1444 User* UserManagerImpl::RemoveRegularOrSupervisedUserFromList( 1479 user_manager::User* UserManagerImpl::RemoveRegularOrSupervisedUserFromList(
1445 const std::string& user_id) { 1480 const std::string& user_id) {
1446 ListPrefUpdate prefs_users_update(g_browser_process->local_state(), 1481 ListPrefUpdate prefs_users_update(g_browser_process->local_state(),
1447 kRegularUsers); 1482 kRegularUsers);
1448 prefs_users_update->Clear(); 1483 prefs_users_update->Clear();
1449 User* user = NULL; 1484 user_manager::User* user = NULL;
1450 for (UserList::iterator it = users_.begin(); it != users_.end(); ) { 1485 for (user_manager::UserList::iterator it = users_.begin();
1486 it != users_.end();) {
1451 const std::string user_email = (*it)->email(); 1487 const std::string user_email = (*it)->email();
1452 if (user_email == user_id) { 1488 if (user_email == user_id) {
1453 user = *it; 1489 user = *it;
1454 it = users_.erase(it); 1490 it = users_.erase(it);
1455 } else { 1491 } else {
1456 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR || 1492 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR ||
1457 (*it)->GetType() == user_manager::USER_TYPE_SUPERVISED) { 1493 (*it)->GetType() == user_manager::USER_TYPE_SUPERVISED) {
1458 prefs_users_update->Append(new base::StringValue(user_email)); 1494 prefs_users_update->Append(new base::StringValue(user_email));
1459 } 1495 }
1460 ++it; 1496 ++it;
(...skipping 12 matching lines...) Expand all
1473 return; 1509 return;
1474 } 1510 }
1475 1511
1476 RemoveNonCryptohomeData(public_account_pending_data_removal); 1512 RemoveNonCryptohomeData(public_account_pending_data_removal);
1477 local_state->ClearPref(kPublicAccountPendingDataRemoval); 1513 local_state->ClearPref(kPublicAccountPendingDataRemoval);
1478 } 1514 }
1479 1515
1480 void UserManagerImpl::CleanUpPublicAccountNonCryptohomeData( 1516 void UserManagerImpl::CleanUpPublicAccountNonCryptohomeData(
1481 const std::vector<std::string>& old_public_accounts) { 1517 const std::vector<std::string>& old_public_accounts) {
1482 std::set<std::string> users; 1518 std::set<std::string> users;
1483 for (UserList::const_iterator it = users_.begin(); it != users_.end(); ++it) 1519 for (user_manager::UserList::const_iterator it = users_.begin();
1520 it != users_.end();
1521 ++it)
1484 users.insert((*it)->email()); 1522 users.insert((*it)->email());
1485 1523
1486 // If the user is logged into a public account that has been removed from the 1524 // If the user is logged into a public account that has been removed from the
1487 // user list, mark the account's data as pending removal after logout. 1525 // user list, mark the account's data as pending removal after logout.
1488 if (IsLoggedInAsPublicAccount()) { 1526 if (IsLoggedInAsPublicAccount()) {
1489 const std::string active_user_id = GetActiveUser()->email(); 1527 const std::string active_user_id = GetActiveUser()->email();
1490 if (users.find(active_user_id) == users.end()) { 1528 if (users.find(active_user_id) == users.end()) {
1491 g_browser_process->local_state()->SetString( 1529 g_browser_process->local_state()->SetString(
1492 kPublicAccountPendingDataRemoval, active_user_id); 1530 kPublicAccountPendingDataRemoval, active_user_id);
1493 users.insert(active_user_id); 1531 users.insert(active_user_id);
(...skipping 10 matching lines...) Expand all
1504 } 1542 }
1505 } 1543 }
1506 1544
1507 bool UserManagerImpl::UpdateAndCleanUpPublicAccounts( 1545 bool UserManagerImpl::UpdateAndCleanUpPublicAccounts(
1508 const std::vector<policy::DeviceLocalAccount>& device_local_accounts) { 1546 const std::vector<policy::DeviceLocalAccount>& device_local_accounts) {
1509 // Try to remove any public account data marked as pending removal. 1547 // Try to remove any public account data marked as pending removal.
1510 CleanUpPublicAccountNonCryptohomeDataPendingRemoval(); 1548 CleanUpPublicAccountNonCryptohomeDataPendingRemoval();
1511 1549
1512 // Get the current list of public accounts. 1550 // Get the current list of public accounts.
1513 std::vector<std::string> old_public_accounts; 1551 std::vector<std::string> old_public_accounts;
1514 for (UserList::const_iterator it = users_.begin(); it != users_.end(); ++it) { 1552 for (user_manager::UserList::const_iterator it = users_.begin();
1553 it != users_.end();
1554 ++it) {
1515 if ((*it)->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) 1555 if ((*it)->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT)
1516 old_public_accounts.push_back((*it)->email()); 1556 old_public_accounts.push_back((*it)->email());
1517 } 1557 }
1518 1558
1519 // Get the new list of public accounts from policy. 1559 // Get the new list of public accounts from policy.
1520 std::vector<std::string> new_public_accounts; 1560 std::vector<std::string> new_public_accounts;
1521 for (std::vector<policy::DeviceLocalAccount>::const_iterator it = 1561 for (std::vector<policy::DeviceLocalAccount>::const_iterator it =
1522 device_local_accounts.begin(); 1562 device_local_accounts.begin();
1523 it != device_local_accounts.end(); ++it) { 1563 it != device_local_accounts.end(); ++it) {
1524 // TODO(mnissler, nkostylev, bartfab): Process Kiosk Apps within the 1564 // TODO(mnissler, nkostylev, bartfab): Process Kiosk Apps within the
(...skipping 19 matching lines...) Expand all
1544 ListPrefUpdate prefs_public_accounts_update(g_browser_process->local_state(), 1584 ListPrefUpdate prefs_public_accounts_update(g_browser_process->local_state(),
1545 kPublicAccounts); 1585 kPublicAccounts);
1546 prefs_public_accounts_update->Clear(); 1586 prefs_public_accounts_update->Clear();
1547 for (std::vector<std::string>::const_iterator it = 1587 for (std::vector<std::string>::const_iterator it =
1548 new_public_accounts.begin(); 1588 new_public_accounts.begin();
1549 it != new_public_accounts.end(); ++it) { 1589 it != new_public_accounts.end(); ++it) {
1550 prefs_public_accounts_update->AppendString(*it); 1590 prefs_public_accounts_update->AppendString(*it);
1551 } 1591 }
1552 1592
1553 // Remove the old public accounts from the user list. 1593 // Remove the old public accounts from the user list.
1554 for (UserList::iterator it = users_.begin(); it != users_.end();) { 1594 for (user_manager::UserList::iterator it = users_.begin();
1595 it != users_.end();) {
1555 if ((*it)->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { 1596 if ((*it)->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
1556 if (*it != GetLoggedInUser()) 1597 if (*it != GetLoggedInUser())
1557 DeleteUser(*it); 1598 DeleteUser(*it);
1558 it = users_.erase(it); 1599 it = users_.erase(it);
1559 } else { 1600 } else {
1560 ++it; 1601 ++it;
1561 } 1602 }
1562 } 1603 }
1563 1604
1564 // Add the new public accounts to the front of the user list. 1605 // Add the new public accounts to the front of the user list.
1565 for (std::vector<std::string>::const_reverse_iterator it = 1606 for (std::vector<std::string>::const_reverse_iterator it =
1566 new_public_accounts.rbegin(); 1607 new_public_accounts.rbegin();
1567 it != new_public_accounts.rend(); ++it) { 1608 it != new_public_accounts.rend(); ++it) {
1568 if (IsLoggedInAsPublicAccount() && *it == GetActiveUser()->email()) 1609 if (IsLoggedInAsPublicAccount() && *it == GetActiveUser()->email())
1569 users_.insert(users_.begin(), GetLoggedInUser()); 1610 users_.insert(users_.begin(), GetLoggedInUser());
1570 else 1611 else
1571 users_.insert(users_.begin(), User::CreatePublicAccountUser(*it)); 1612 users_.insert(users_.begin(),
1613 user_manager::User::CreatePublicAccountUser(*it));
1572 UpdatePublicAccountDisplayName(*it); 1614 UpdatePublicAccountDisplayName(*it);
1573 } 1615 }
1574 1616
1575 for (UserList::iterator ui = users_.begin(), 1617 for (user_manager::UserList::iterator
1576 ue = users_.begin() + new_public_accounts.size(); 1618 ui = users_.begin(),
1577 ui != ue; ++ui) { 1619 ue = users_.begin() + new_public_accounts.size();
1620 ui != ue;
1621 ++ui) {
1578 GetUserImageManager((*ui)->email())->LoadUserImage(); 1622 GetUserImageManager((*ui)->email())->LoadUserImage();
1579 } 1623 }
1580 1624
1581 // Remove data belonging to public accounts that are no longer found on the 1625 // Remove data belonging to public accounts that are no longer found on the
1582 // user list. 1626 // user list.
1583 CleanUpPublicAccountNonCryptohomeData(old_public_accounts); 1627 CleanUpPublicAccountNonCryptohomeData(old_public_accounts);
1584 1628
1585 return true; 1629 return true;
1586 } 1630 }
1587 1631
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 return default_flow_.get(); 1688 return default_flow_.get();
1645 } 1689 }
1646 1690
1647 void UserManagerImpl::NotifyUserListChanged() { 1691 void UserManagerImpl::NotifyUserListChanged() {
1648 content::NotificationService::current()->Notify( 1692 content::NotificationService::current()->Notify(
1649 chrome::NOTIFICATION_USER_LIST_CHANGED, 1693 chrome::NOTIFICATION_USER_LIST_CHANGED,
1650 content::Source<UserManager>(this), 1694 content::Source<UserManager>(this),
1651 content::NotificationService::NoDetails()); 1695 content::NotificationService::NoDetails());
1652 } 1696 }
1653 1697
1654 void UserManagerImpl::NotifyActiveUserChanged(const User* active_user) { 1698 void UserManagerImpl::NotifyActiveUserChanged(
1699 const user_manager::User* active_user) {
1655 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1700 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1656 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 1701 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
1657 session_state_observer_list_, 1702 session_state_observer_list_,
1658 ActiveUserChanged(active_user)); 1703 ActiveUserChanged(active_user));
1659 } 1704 }
1660 1705
1661 void UserManagerImpl::NotifyUserAddedToSession(const User* added_user) { 1706 void UserManagerImpl::NotifyUserAddedToSession(
1707 const user_manager::User* added_user) {
1662 UpdateNumberOfUsers(); 1708 UpdateNumberOfUsers();
1663 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1709 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1664 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 1710 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
1665 session_state_observer_list_, 1711 session_state_observer_list_,
1666 UserAddedToSession(added_user)); 1712 UserAddedToSession(added_user));
1667 } 1713 }
1668 1714
1669 void UserManagerImpl::NotifyActiveUserHashChanged(const std::string& hash) { 1715 void UserManagerImpl::NotifyActiveUserHashChanged(const std::string& hash) {
1670 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1716 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1671 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver, 1717 FOR_EACH_OBSERVER(UserManager::UserSessionStateObserver,
(...skipping 27 matching lines...) Expand all
1699 login_user_type = LoginState::LOGGED_IN_USER_REGULAR; 1745 login_user_type = LoginState::LOGGED_IN_USER_REGULAR;
1700 1746
1701 if (primary_user_) { 1747 if (primary_user_) {
1702 LoginState::Get()->SetLoggedInStateAndPrimaryUser( 1748 LoginState::Get()->SetLoggedInStateAndPrimaryUser(
1703 logged_in_state, login_user_type, primary_user_->username_hash()); 1749 logged_in_state, login_user_type, primary_user_->username_hash());
1704 } else { 1750 } else {
1705 LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type); 1751 LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type);
1706 } 1752 }
1707 } 1753 }
1708 1754
1709 void UserManagerImpl::SetLRUUser(User* user) { 1755 void UserManagerImpl::SetLRUUser(user_manager::User* user) {
1710 UserList::iterator it = std::find(lru_logged_in_users_.begin(), 1756 user_manager::UserList::iterator it =
1711 lru_logged_in_users_.end(), 1757 std::find(lru_logged_in_users_.begin(), lru_logged_in_users_.end(), user);
1712 user);
1713 if (it != lru_logged_in_users_.end()) 1758 if (it != lru_logged_in_users_.end())
1714 lru_logged_in_users_.erase(it); 1759 lru_logged_in_users_.erase(it);
1715 lru_logged_in_users_.insert(lru_logged_in_users_.begin(), user); 1760 lru_logged_in_users_.insert(lru_logged_in_users_.begin(), user);
1716 } 1761 }
1717 1762
1718 void UserManagerImpl::SendRegularUserLoginMetrics(const std::string& user_id) { 1763 void UserManagerImpl::SendRegularUserLoginMetrics(const std::string& user_id) {
1719 // If this isn't the first time Chrome was run after the system booted, 1764 // If this isn't the first time Chrome was run after the system booted,
1720 // assume that Chrome was restarted because a previous session ended. 1765 // assume that Chrome was restarted because a previous session ended.
1721 if (!CommandLine::ForCurrentProcess()->HasSwitch( 1766 if (!CommandLine::ForCurrentProcess()->HasSwitch(
1722 switches::kFirstExecAfterBoot)) { 1767 switches::kFirstExecAfterBoot)) {
(...skipping 26 matching lines...) Expand all
1749 base::Unretained(this), 1794 base::Unretained(this),
1750 user_id))); 1795 user_id)));
1751 } else { 1796 } else {
1752 DoUpdateAccountLocale(user_id, locale); 1797 DoUpdateAccountLocale(user_id, locale);
1753 } 1798 }
1754 } 1799 }
1755 1800
1756 void UserManagerImpl::DoUpdateAccountLocale( 1801 void UserManagerImpl::DoUpdateAccountLocale(
1757 const std::string& user_id, 1802 const std::string& user_id,
1758 const std::string& resolved_locale) { 1803 const std::string& resolved_locale) {
1759 if (User* user = FindUserAndModify(user_id)) 1804 if (user_manager::User* user = FindUserAndModify(user_id))
1760 user->SetAccountLocale(resolved_locale); 1805 user->SetAccountLocale(resolved_locale);
1761 } 1806 }
1762 1807
1763 void UserManagerImpl::UpdateNumberOfUsers() { 1808 void UserManagerImpl::UpdateNumberOfUsers() {
1764 size_t users = GetLoggedInUsers().size(); 1809 size_t users = GetLoggedInUsers().size();
1765 if (users) { 1810 if (users) {
1766 // Write the user number as UMA stat when a multi user session is possible. 1811 // Write the user number as UMA stat when a multi user session is possible.
1767 if ((users + GetUsersAdmittedForMultiProfile().size()) > 1) 1812 if ((users + GetUsersAdmittedForMultiProfile().size()) > 1)
1768 ash::MultiProfileUMA::RecordUserCount(users); 1813 ash::MultiProfileUMA::RecordUserCount(users);
1769 } 1814 }
1770 1815
1771 base::debug::SetCrashKeyValue(crash_keys::kNumberOfUsers, 1816 base::debug::SetCrashKeyValue(crash_keys::kNumberOfUsers,
1772 base::StringPrintf("%" PRIuS, GetLoggedInUsers().size())); 1817 base::StringPrintf("%" PRIuS, GetLoggedInUsers().size()));
1773 } 1818 }
1774 1819
1775 void UserManagerImpl::DeleteUser(User* user) { 1820 void UserManagerImpl::DeleteUser(user_manager::User* user) {
1776 const bool is_active_user = (user == active_user_); 1821 const bool is_active_user = (user == active_user_);
1777 delete user; 1822 delete user;
1778 if (is_active_user) 1823 if (is_active_user)
1779 active_user_ = NULL; 1824 active_user_ = NULL;
1780 } 1825 }
1781 1826
1782 } // namespace chromeos 1827 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/users/user_manager_impl.h ('k') | chrome/browser/chromeos/login/users/user_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698