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

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

Issue 1412813003: This CL replaces user_manager::UserID with AccountId. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@468875--Chrome-OS-handles-deletion-of-Gmail-account-poorly--Create-AccountID-structure-part2--user_names
Patch Set: Fix Win GN build. Created 5 years, 1 month 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
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/chrome_user_manager_impl.h" 5 #include "chrome/browser/chromeos/login/users/chrome_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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 BootstrapManager* ChromeUserManagerImpl::GetBootstrapManager() { 199 BootstrapManager* ChromeUserManagerImpl::GetBootstrapManager() {
200 return bootstrap_manager_.get(); 200 return bootstrap_manager_.get();
201 } 201 }
202 202
203 MultiProfileUserController* 203 MultiProfileUserController*
204 ChromeUserManagerImpl::GetMultiProfileUserController() { 204 ChromeUserManagerImpl::GetMultiProfileUserController() {
205 return multi_profile_user_controller_.get(); 205 return multi_profile_user_controller_.get();
206 } 206 }
207 207
208 UserImageManager* ChromeUserManagerImpl::GetUserImageManager( 208 UserImageManager* ChromeUserManagerImpl::GetUserImageManager(
209 const std::string& user_id) { 209 const AccountId& account_id) {
210 UserImageManagerMap::iterator ui = user_image_managers_.find(user_id); 210 UserImageManagerMap::iterator ui = user_image_managers_.find(account_id);
211 if (ui != user_image_managers_.end()) 211 if (ui != user_image_managers_.end())
212 return ui->second.get(); 212 return ui->second.get();
213 linked_ptr<UserImageManagerImpl> mgr(new UserImageManagerImpl(user_id, this)); 213 linked_ptr<UserImageManagerImpl> mgr(
214 user_image_managers_[user_id] = mgr; 214 new UserImageManagerImpl(account_id.GetUserEmail(), this));
215 user_image_managers_[account_id] = mgr;
215 return mgr.get(); 216 return mgr.get();
216 } 217 }
217 218
218 SupervisedUserManager* ChromeUserManagerImpl::GetSupervisedUserManager() { 219 SupervisedUserManager* ChromeUserManagerImpl::GetSupervisedUserManager() {
219 return supervised_user_manager_.get(); 220 return supervised_user_manager_.get();
220 } 221 }
221 222
222 user_manager::UserList ChromeUserManagerImpl::GetUsersAllowedForMultiProfile() 223 user_manager::UserList ChromeUserManagerImpl::GetUsersAllowedForMultiProfile()
223 const { 224 const {
224 // Supervised users are not allowed to use multi-profiles. 225 // Supervised users are not allowed to use multi-profiles.
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 DCHECK_CURRENTLY_ON(BrowserThread::UI); 310 DCHECK_CURRENTLY_ON(BrowserThread::UI);
310 ChromeUserManager::SessionStarted(); 311 ChromeUserManager::SessionStarted();
311 312
312 content::NotificationService::current()->Notify( 313 content::NotificationService::current()->Notify(
313 chrome::NOTIFICATION_SESSION_STARTED, 314 chrome::NOTIFICATION_SESSION_STARTED,
314 content::Source<UserManager>(this), 315 content::Source<UserManager>(this),
315 content::Details<const user_manager::User>(GetActiveUser())); 316 content::Details<const user_manager::User>(GetActiveUser()));
316 } 317 }
317 318
318 void ChromeUserManagerImpl::RemoveUserInternal( 319 void ChromeUserManagerImpl::RemoveUserInternal(
319 const std::string& user_email, 320 const AccountId& account_id,
320 user_manager::RemoveUserDelegate* delegate) { 321 user_manager::RemoveUserDelegate* delegate) {
321 CrosSettings* cros_settings = CrosSettings::Get(); 322 CrosSettings* cros_settings = CrosSettings::Get();
322 323
323 const base::Closure& callback = 324 const base::Closure& callback =
324 base::Bind(&ChromeUserManagerImpl::RemoveUserInternal, 325 base::Bind(&ChromeUserManagerImpl::RemoveUserInternal,
325 weak_factory_.GetWeakPtr(), 326 weak_factory_.GetWeakPtr(), account_id, delegate);
326 user_email,
327 delegate);
328 327
329 // Ensure the value of owner email has been fetched. 328 // Ensure the value of owner email has been fetched.
330 if (CrosSettingsProvider::TRUSTED != 329 if (CrosSettingsProvider::TRUSTED !=
331 cros_settings->PrepareTrustedValues(callback)) { 330 cros_settings->PrepareTrustedValues(callback)) {
332 // Value of owner email is not fetched yet. RemoveUserInternal will be 331 // Value of owner email is not fetched yet. RemoveUserInternal will be
333 // called again after fetch completion. 332 // called again after fetch completion.
334 return; 333 return;
335 } 334 }
336 std::string owner; 335 std::string owner;
337 cros_settings->GetString(kDeviceOwner, &owner); 336 cros_settings->GetString(kDeviceOwner, &owner);
338 if (user_email == owner) { 337 if (account_id == AccountId::FromUserEmail(owner)) {
339 // Owner is not allowed to be removed from the device. 338 // Owner is not allowed to be removed from the device.
340 return; 339 return;
341 } 340 }
342 RemoveNonOwnerUserInternal(user_email, delegate); 341 RemoveNonOwnerUserInternal(account_id, delegate);
343 } 342 }
344 343
345 void ChromeUserManagerImpl::SaveUserOAuthStatus( 344 void ChromeUserManagerImpl::SaveUserOAuthStatus(
346 const std::string& user_id, 345 const AccountId& account_id,
347 user_manager::User::OAuthTokenStatus oauth_token_status) { 346 user_manager::User::OAuthTokenStatus oauth_token_status) {
348 DCHECK_CURRENTLY_ON(BrowserThread::UI); 347 DCHECK_CURRENTLY_ON(BrowserThread::UI);
349 ChromeUserManager::SaveUserOAuthStatus(user_id, oauth_token_status); 348 ChromeUserManager::SaveUserOAuthStatus(account_id, oauth_token_status);
350 349
351 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(oauth_token_status); 350 GetUserFlow(account_id)->HandleOAuthTokenStatusChange(oauth_token_status);
352 } 351 }
353 352
354 void ChromeUserManagerImpl::SaveUserDisplayName( 353 void ChromeUserManagerImpl::SaveUserDisplayName(
355 const std::string& user_id, 354 const AccountId& account_id,
356 const base::string16& display_name) { 355 const base::string16& display_name) {
357 DCHECK_CURRENTLY_ON(BrowserThread::UI); 356 DCHECK_CURRENTLY_ON(BrowserThread::UI);
358 ChromeUserManager::SaveUserDisplayName(user_id, display_name); 357 ChromeUserManager::SaveUserDisplayName(account_id, display_name);
359 358
360 // Do not update local state if data stored or cached outside the user's 359 // Do not update local state if data stored or cached outside the user's
361 // cryptohome is to be treated as ephemeral. 360 // cryptohome is to be treated as ephemeral.
362 if (!IsUserNonCryptohomeDataEphemeral(user_id)) 361 if (!IsUserNonCryptohomeDataEphemeral(account_id)) {
363 supervised_user_manager_->UpdateManagerName(user_id, display_name); 362 supervised_user_manager_->UpdateManagerName(account_id.GetUserEmail(),
363 display_name);
364 }
364 } 365 }
365 366
366 void ChromeUserManagerImpl::StopPolicyObserverForTesting() { 367 void ChromeUserManagerImpl::StopPolicyObserverForTesting() {
367 avatar_policy_observer_.reset(); 368 avatar_policy_observer_.reset();
368 wallpaper_policy_observer_.reset(); 369 wallpaper_policy_observer_.reset();
369 } 370 }
370 371
371 void ChromeUserManagerImpl::Observe( 372 void ChromeUserManagerImpl::Observe(
372 int type, 373 int type,
373 const content::NotificationSource& source, 374 const content::NotificationSource& source,
(...skipping 30 matching lines...) Expand all
404 UpdateUserTimeZoneRefresher(profile); 405 UpdateUserTimeZoneRefresher(profile);
405 break; 406 break;
406 } 407 }
407 case chrome::NOTIFICATION_PROFILE_CREATED: { 408 case chrome::NOTIFICATION_PROFILE_CREATED: {
408 Profile* profile = content::Source<Profile>(source).ptr(); 409 Profile* profile = content::Source<Profile>(source).ptr();
409 user_manager::User* user = 410 user_manager::User* user =
410 ProfileHelper::Get()->GetUserByProfile(profile); 411 ProfileHelper::Get()->GetUserByProfile(profile);
411 if (user != NULL) { 412 if (user != NULL) {
412 user->set_profile_is_created(); 413 user->set_profile_is_created();
413 414
414 if (user->HasGaiaAccount()) { 415 if (user->HasGaiaAccount())
415 UserImageManager* image_manager = GetUserImageManager(user->email()); 416 GetUserImageManager(user->GetAccountId())->UserProfileCreated();
416 image_manager->UserProfileCreated();
417 }
418 } 417 }
419 418
420 // If there is pending user switch, do it now. 419 // If there is pending user switch, do it now.
421 if (!GetPendingUserSwitchID().empty()) { 420 if (GetPendingUserSwitchID().is_valid()) {
422 // Call SwitchActiveUser async because otherwise it may cause 421 // Call SwitchActiveUser async because otherwise it may cause
423 // ProfileManager::GetProfile before the profile gets registered 422 // ProfileManager::GetProfile before the profile gets registered
424 // in ProfileManager. It happens in case of sync profile load when 423 // in ProfileManager. It happens in case of sync profile load when
425 // NOTIFICATION_PROFILE_CREATED is called synchronously. 424 // NOTIFICATION_PROFILE_CREATED is called synchronously.
426 base::MessageLoop::current()->PostTask( 425 base::MessageLoop::current()->PostTask(
427 FROM_HERE, 426 FROM_HERE,
428 base::Bind(&ChromeUserManagerImpl::SwitchActiveUser, 427 base::Bind(&ChromeUserManagerImpl::SwitchActiveUser,
429 weak_factory_.GetWeakPtr(), 428 weak_factory_.GetWeakPtr(),
430 GetPendingUserSwitchID())); 429 GetPendingUserSwitchID()));
431 SetPendingUserSwitchID(std::string()); 430 SetPendingUserSwitchId(EmptyAccountId());
432 } 431 }
433 break; 432 break;
434 } 433 }
435 default: 434 default:
436 NOTREACHED(); 435 NOTREACHED();
437 } 436 }
438 } 437 }
439 438
440 void ChromeUserManagerImpl::OnExternalDataSet(const std::string& policy, 439 void ChromeUserManagerImpl::OnExternalDataSet(const std::string& policy,
441 const std::string& user_id) { 440 const std::string& user_id) {
442 if (policy == policy::key::kUserAvatarImage) 441 if (policy == policy::key::kUserAvatarImage)
443 GetUserImageManager(user_id)->OnExternalDataSet(policy); 442 GetUserImageManager(AccountId::FromUserEmail(user_id))
443 ->OnExternalDataSet(policy);
444 else if (policy == policy::key::kWallpaperImage) 444 else if (policy == policy::key::kWallpaperImage)
445 WallpaperManager::Get()->OnPolicySet(policy, user_id); 445 WallpaperManager::Get()->OnPolicySet(policy, user_id);
446 else 446 else
447 NOTREACHED(); 447 NOTREACHED();
448 } 448 }
449 449
450 void ChromeUserManagerImpl::OnExternalDataCleared(const std::string& policy, 450 void ChromeUserManagerImpl::OnExternalDataCleared(const std::string& policy,
451 const std::string& user_id) { 451 const std::string& user_id) {
452 if (policy == policy::key::kUserAvatarImage) 452 if (policy == policy::key::kUserAvatarImage)
453 GetUserImageManager(user_id)->OnExternalDataCleared(policy); 453 GetUserImageManager(AccountId::FromUserEmail(user_id))
454 ->OnExternalDataCleared(policy);
454 else if (policy == policy::key::kWallpaperImage) 455 else if (policy == policy::key::kWallpaperImage)
455 WallpaperManager::Get()->OnPolicyCleared(policy, user_id); 456 WallpaperManager::Get()->OnPolicyCleared(policy, user_id);
456 else 457 else
457 NOTREACHED(); 458 NOTREACHED();
458 } 459 }
459 460
460 void ChromeUserManagerImpl::OnExternalDataFetched( 461 void ChromeUserManagerImpl::OnExternalDataFetched(
461 const std::string& policy, 462 const std::string& policy,
462 const std::string& user_id, 463 const std::string& user_id,
463 scoped_ptr<std::string> data) { 464 scoped_ptr<std::string> data) {
464 if (policy == policy::key::kUserAvatarImage) 465 if (policy == policy::key::kUserAvatarImage)
465 GetUserImageManager(user_id)->OnExternalDataFetched(policy, data.Pass()); 466 GetUserImageManager(AccountId::FromUserEmail(user_id))
467 ->OnExternalDataFetched(policy, data.Pass());
466 else if (policy == policy::key::kWallpaperImage) 468 else if (policy == policy::key::kWallpaperImage)
467 WallpaperManager::Get()->OnPolicyFetched(policy, user_id, data.Pass()); 469 WallpaperManager::Get()->OnPolicyFetched(policy, user_id, data.Pass());
468 else 470 else
469 NOTREACHED(); 471 NOTREACHED();
470 } 472 }
471 473
472 void ChromeUserManagerImpl::OnPolicyUpdated(const std::string& user_id) { 474 void ChromeUserManagerImpl::OnPolicyUpdated(const std::string& user_id) {
473 const user_manager::User* user = FindUser(user_id); 475 const user_manager::User* user = FindUser(AccountId::FromUserEmail(user_id));
474 if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) 476 if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
475 return; 477 return;
476 UpdatePublicAccountDisplayName(user_id); 478 UpdatePublicAccountDisplayName(user_id);
477 } 479 }
478 480
479 void ChromeUserManagerImpl::OnDeviceLocalAccountsChanged() { 481 void ChromeUserManagerImpl::OnDeviceLocalAccountsChanged() {
480 // No action needed here, changes to the list of device-local accounts get 482 // No action needed here, changes to the list of device-local accounts get
481 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer. 483 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer.
482 } 484 }
483 485
484 bool ChromeUserManagerImpl::CanCurrentUserLock() const { 486 bool ChromeUserManagerImpl::CanCurrentUserLock() const {
485 return ChromeUserManager::CanCurrentUserLock() && 487 return ChromeUserManager::CanCurrentUserLock() &&
486 GetCurrentUserFlow()->CanLockScreen(); 488 GetCurrentUserFlow()->CanLockScreen();
487 } 489 }
488 490
489 bool ChromeUserManagerImpl::IsUserNonCryptohomeDataEphemeral( 491 bool ChromeUserManagerImpl::IsUserNonCryptohomeDataEphemeral(
490 const std::string& user_id) const { 492 const AccountId& account_id) const {
491 // Data belonging to the obsolete public accounts whose data has not been 493 // Data belonging to the obsolete public accounts whose data has not been
492 // removed yet is not ephemeral. 494 // removed yet is not ephemeral.
493 bool is_obsolete_public_account = IsPublicAccountMarkedForRemoval(user_id); 495 bool is_obsolete_public_account = IsPublicAccountMarkedForRemoval(account_id);
494 496
495 return !is_obsolete_public_account && 497 return !is_obsolete_public_account &&
496 ChromeUserManager::IsUserNonCryptohomeDataEphemeral(user_id); 498 ChromeUserManager::IsUserNonCryptohomeDataEphemeral(account_id);
497 } 499 }
498 500
499 bool ChromeUserManagerImpl::AreEphemeralUsersEnabled() const { 501 bool ChromeUserManagerImpl::AreEphemeralUsersEnabled() const {
500 policy::BrowserPolicyConnectorChromeOS* connector = 502 policy::BrowserPolicyConnectorChromeOS* connector =
501 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 503 g_browser_process->platform_part()->browser_policy_connector_chromeos();
502 return GetEphemeralUsersEnabled() && 504 return GetEphemeralUsersEnabled() &&
503 (connector->IsEnterpriseManaged() || !GetOwnerEmail().empty()); 505 (connector->IsEnterpriseManaged() || GetOwnerAccountId().is_valid());
504 } 506 }
505 507
506 void ChromeUserManagerImpl::OnUserRemoved(const std::string& user_id) { 508 void ChromeUserManagerImpl::OnUserRemoved(const AccountId& account_id) {
507 RemoveReportingUser(FullyCanonicalize(user_id)); 509 RemoveReportingUser(FullyCanonicalize(account_id.GetUserEmail()));
508 } 510 }
509 511
510 const std::string& ChromeUserManagerImpl::GetApplicationLocale() const { 512 const std::string& ChromeUserManagerImpl::GetApplicationLocale() const {
511 return g_browser_process->GetApplicationLocale(); 513 return g_browser_process->GetApplicationLocale();
512 } 514 }
513 515
514 PrefService* ChromeUserManagerImpl::GetLocalState() const { 516 PrefService* ChromeUserManagerImpl::GetLocalState() const {
515 return g_browser_process ? g_browser_process->local_state() : NULL; 517 return g_browser_process ? g_browser_process->local_state() : NULL;
516 } 518 }
517 519
518 void ChromeUserManagerImpl::HandleUserOAuthTokenStatusChange( 520 void ChromeUserManagerImpl::HandleUserOAuthTokenStatusChange(
519 const std::string& user_id, 521 const AccountId& account_id,
520 user_manager::User::OAuthTokenStatus status) const { 522 user_manager::User::OAuthTokenStatus status) const {
521 GetUserFlow(user_id)->HandleOAuthTokenStatusChange(status); 523 GetUserFlow(account_id)->HandleOAuthTokenStatusChange(status);
522 } 524 }
523 525
524 bool ChromeUserManagerImpl::IsEnterpriseManaged() const { 526 bool ChromeUserManagerImpl::IsEnterpriseManaged() const {
525 policy::BrowserPolicyConnectorChromeOS* connector = 527 policy::BrowserPolicyConnectorChromeOS* connector =
526 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 528 g_browser_process->platform_part()->browser_policy_connector_chromeos();
527 return connector->IsEnterpriseManaged(); 529 return connector->IsEnterpriseManaged();
528 } 530 }
529 531
530 void ChromeUserManagerImpl::LoadPublicAccounts( 532 void ChromeUserManagerImpl::LoadPublicAccounts(
531 std::set<std::string>* public_sessions_set) { 533 std::set<AccountId>* public_sessions_set) {
532 const base::ListValue* prefs_public_sessions = 534 const base::ListValue* prefs_public_sessions =
533 GetLocalState()->GetList(kPublicAccounts); 535 GetLocalState()->GetList(kPublicAccounts);
534 std::vector<std::string> public_sessions; 536 std::vector<AccountId> public_sessions;
535 ParseUserList(*prefs_public_sessions, 537 ParseUserList(*prefs_public_sessions, std::set<AccountId>(), &public_sessions,
536 std::set<std::string>(),
537 &public_sessions,
538 public_sessions_set); 538 public_sessions_set);
539 for (std::vector<std::string>::const_iterator it = public_sessions.begin(); 539 for (const AccountId& account_id : public_sessions) {
540 it != public_sessions.end(); 540 users_.push_back(user_manager::User::CreatePublicAccountUser(account_id));
541 ++it) { 541 UpdatePublicAccountDisplayName(account_id.GetUserEmail());
542 users_.push_back(user_manager::User::CreatePublicAccountUser(*it));
543 UpdatePublicAccountDisplayName(*it);
544 } 542 }
545 } 543 }
546 544
547 void ChromeUserManagerImpl::PerformPreUserListLoadingActions() { 545 void ChromeUserManagerImpl::PerformPreUserListLoadingActions() {
548 // Clean up user list first. All code down the path should be synchronous, 546 // Clean up user list first. All code down the path should be synchronous,
549 // so that local state after transaction rollback is in consistent state. 547 // so that local state after transaction rollback is in consistent state.
550 // This process also should not trigger EnsureUsersLoaded again. 548 // This process also should not trigger EnsureUsersLoaded again.
551 if (supervised_user_manager_->HasFailedUserCreationTransaction()) 549 if (supervised_user_manager_->HasFailedUserCreationTransaction())
552 supervised_user_manager_->RollbackUserCreationTransaction(); 550 supervised_user_manager_->RollbackUserCreationTransaction();
553 551
554 // Abandon all unfinished bootstraps. 552 // Abandon all unfinished bootstraps.
555 bootstrap_manager_->RemoveAllPendingBootstrap(); 553 bootstrap_manager_->RemoveAllPendingBootstrap();
556 } 554 }
557 555
558 void ChromeUserManagerImpl::PerformPostUserListLoadingActions() { 556 void ChromeUserManagerImpl::PerformPostUserListLoadingActions() {
559 for (user_manager::UserList::iterator ui = users_.begin(), ue = users_.end(); 557 for (user_manager::UserList::iterator ui = users_.begin(), ue = users_.end();
560 ui != ue; 558 ui != ue;
561 ++ui) { 559 ++ui) {
562 GetUserImageManager((*ui)->email())->LoadUserImage(); 560 GetUserImageManager((*ui)->GetAccountId())->LoadUserImage();
563 } 561 }
564 } 562 }
565 563
566 void ChromeUserManagerImpl::PerformPostUserLoggedInActions( 564 void ChromeUserManagerImpl::PerformPostUserLoggedInActions(
567 bool browser_restart) { 565 bool browser_restart) {
568 // Initialize the session length limiter and start it only if 566 // Initialize the session length limiter and start it only if
569 // session limit is defined by the policy. 567 // session limit is defined by the policy.
570 session_length_limiter_.reset( 568 session_length_limiter_.reset(
571 new SessionLengthLimiter(NULL, browser_restart)); 569 new SessionLengthLimiter(NULL, browser_restart));
572 } 570 }
573 571
574 bool ChromeUserManagerImpl::IsDemoApp(const std::string& user_id) const { 572 bool ChromeUserManagerImpl::IsDemoApp(const AccountId& account_id) const {
575 return DemoAppLauncher::IsDemoAppSession(user_id); 573 return DemoAppLauncher::IsDemoAppSession(account_id.GetUserEmail());
576 } 574 }
577 575
578 bool ChromeUserManagerImpl::IsKioskApp(const std::string& user_id) const { 576 bool ChromeUserManagerImpl::IsKioskApp(const AccountId& account_id) const {
579 policy::DeviceLocalAccount::Type device_local_account_type; 577 policy::DeviceLocalAccount::Type device_local_account_type;
580 return policy::IsDeviceLocalAccountUser(user_id, 578 return policy::IsDeviceLocalAccountUser(account_id.GetUserEmail(),
581 &device_local_account_type) && 579 &device_local_account_type) &&
582 device_local_account_type == 580 device_local_account_type ==
583 policy::DeviceLocalAccount::TYPE_KIOSK_APP; 581 policy::DeviceLocalAccount::TYPE_KIOSK_APP;
584 } 582 }
585 583
586 bool ChromeUserManagerImpl::IsPublicAccountMarkedForRemoval( 584 bool ChromeUserManagerImpl::IsPublicAccountMarkedForRemoval(
587 const std::string& user_id) const { 585 const AccountId& account_id) const {
588 return user_id == 586 return account_id == AccountId::FromUserEmail(GetLocalState()->GetString(
589 GetLocalState()->GetString(kPublicAccountPendingDataRemoval); 587 kPublicAccountPendingDataRemoval));
590 } 588 }
591 589
592 void ChromeUserManagerImpl::RetrieveTrustedDevicePolicies() { 590 void ChromeUserManagerImpl::RetrieveTrustedDevicePolicies() {
593 // Local state may not be initialized in unit_tests. 591 // Local state may not be initialized in unit_tests.
594 if (!GetLocalState()) 592 if (!GetLocalState())
595 return; 593 return;
596 594
597 SetEphemeralUsersEnabled(false); 595 SetEphemeralUsersEnabled(false);
598 SetOwnerEmail(std::string()); 596 SetOwnerId(EmptyAccountId());
599 597
600 // Schedule a callback if device policy has not yet been verified. 598 // Schedule a callback if device policy has not yet been verified.
601 if (CrosSettingsProvider::TRUSTED != 599 if (CrosSettingsProvider::TRUSTED !=
602 cros_settings_->PrepareTrustedValues( 600 cros_settings_->PrepareTrustedValues(
603 base::Bind(&ChromeUserManagerImpl::RetrieveTrustedDevicePolicies, 601 base::Bind(&ChromeUserManagerImpl::RetrieveTrustedDevicePolicies,
604 weak_factory_.GetWeakPtr()))) { 602 weak_factory_.GetWeakPtr()))) {
605 return; 603 return;
606 } 604 }
607 605
608 bool ephemeral_users_enabled = false; 606 bool ephemeral_users_enabled = false;
609 cros_settings_->GetBoolean(kAccountsPrefEphemeralUsersEnabled, 607 cros_settings_->GetBoolean(kAccountsPrefEphemeralUsersEnabled,
610 &ephemeral_users_enabled); 608 &ephemeral_users_enabled);
611 SetEphemeralUsersEnabled(ephemeral_users_enabled); 609 SetEphemeralUsersEnabled(ephemeral_users_enabled);
612 610
613 std::string owner_email; 611 std::string owner_email;
614 cros_settings_->GetString(kDeviceOwner, &owner_email); 612 cros_settings_->GetString(kDeviceOwner, &owner_email);
615 SetOwnerEmail(owner_email); 613 SetOwnerId(AccountId::FromUserEmail(owner_email));
616 614
617 EnsureUsersLoaded(); 615 EnsureUsersLoaded();
618 616
619 bool changed = UpdateAndCleanUpPublicAccounts( 617 bool changed = UpdateAndCleanUpPublicAccounts(
620 policy::GetDeviceLocalAccounts(cros_settings_)); 618 policy::GetDeviceLocalAccounts(cros_settings_));
621 619
622 // If ephemeral users are enabled and we are on the login screen, take this 620 // If ephemeral users are enabled and we are on the login screen, take this
623 // opportunity to clean up by removing all regular users except the owner. 621 // opportunity to clean up by removing all regular users except the owner.
624 if (GetEphemeralUsersEnabled() && !IsUserLoggedIn()) { 622 if (GetEphemeralUsersEnabled() && !IsUserLoggedIn()) {
625 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers); 623 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers);
626 prefs_users_update->Clear(); 624 prefs_users_update->Clear();
627 for (user_manager::UserList::iterator it = users_.begin(); 625 for (user_manager::UserList::iterator it = users_.begin();
628 it != users_.end();) { 626 it != users_.end();) {
629 const std::string user_email = (*it)->email(); 627 const AccountId account_id = (*it)->GetAccountId();
630 if ((*it)->HasGaiaAccount() && user_email != GetOwnerEmail()) { 628 if ((*it)->HasGaiaAccount() && account_id != GetOwnerAccountId()) {
631 RemoveNonCryptohomeData(user_email); 629 RemoveNonCryptohomeData(account_id);
632 DeleteUser(*it); 630 DeleteUser(*it);
633 it = users_.erase(it); 631 it = users_.erase(it);
634 changed = true; 632 changed = true;
635 } else { 633 } else {
636 if ((*it)->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT) 634 if ((*it)->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
637 prefs_users_update->Append(new base::StringValue(user_email)); 635 prefs_users_update->Append(
636 new base::StringValue(account_id.GetUserEmail()));
638 ++it; 637 ++it;
639 } 638 }
640 } 639 }
641 } 640 }
642 641
643 if (changed) 642 if (changed)
644 NotifyUserListChanged(); 643 NotifyUserListChanged();
645 } 644 }
646 645
647 void ChromeUserManagerImpl::GuestUserLoggedIn() { 646 void ChromeUserManagerImpl::GuestUserLoggedIn() {
648 DCHECK_CURRENTLY_ON(BrowserThread::UI); 647 DCHECK_CURRENTLY_ON(BrowserThread::UI);
649 ChromeUserManager::GuestUserLoggedIn(); 648 ChromeUserManager::GuestUserLoggedIn();
650 649
651 // TODO(nkostylev): Add support for passing guest session cryptohome 650 // TODO(nkostylev): Add support for passing guest session cryptohome
652 // mount point. Legacy (--login-profile) value will be used for now. 651 // mount point. Legacy (--login-profile) value will be used for now.
653 // http://crosbug.com/230859 652 // http://crosbug.com/230859
654 active_user_->SetStubImage( 653 active_user_->SetStubImage(
655 user_manager::UserImage( 654 user_manager::UserImage(
656 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 655 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
657 IDR_PROFILE_PICTURE_LOADING)), 656 IDR_PROFILE_PICTURE_LOADING)),
658 user_manager::User::USER_IMAGE_INVALID, 657 user_manager::User::USER_IMAGE_INVALID,
659 false); 658 false);
660 659
661 // Initializes wallpaper after active_user_ is set. 660 // Initializes wallpaper after active_user_ is set.
662 WallpaperManager::Get()->SetUserWallpaperNow( 661 WallpaperManager::Get()->SetUserWallpaperNow(
663 login::GuestAccountId().GetUserEmail()); 662 login::GuestAccountId().GetUserEmail());
664 } 663 }
665 664
666 void ChromeUserManagerImpl::RegularUserLoggedIn(const std::string& user_id) { 665 void ChromeUserManagerImpl::RegularUserLoggedIn(const AccountId& account_id) {
667 ChromeUserManager::RegularUserLoggedIn(user_id); 666 ChromeUserManager::RegularUserLoggedIn(account_id);
668 667
669 if (FakeOwnership()) { 668 if (FakeOwnership()) {
670 std::string owner_email = GetActiveUser()->email(); 669 const AccountId owner_account_id = GetActiveUser()->GetAccountId();
671 VLOG(1) << "Set device owner to: " << owner_email; 670 VLOG(1) << "Set device owner to: " << owner_account_id.GetUserEmail();
672 CrosSettings::Get()->SetString(kDeviceOwner, owner_email); 671 CrosSettings::Get()->SetString(kDeviceOwner,
673 SetOwnerEmail(owner_email); 672 owner_account_id.GetUserEmail());
673 SetOwnerId(owner_account_id);
674 } 674 }
675 675
676 if (IsCurrentUserNew()) 676 if (IsCurrentUserNew())
677 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 677 WallpaperManager::Get()->SetUserWallpaperNow(account_id.GetUserEmail());
678 678
679 GetUserImageManager(user_id)->UserLoggedIn(IsCurrentUserNew(), false); 679 GetUserImageManager(account_id)->UserLoggedIn(IsCurrentUserNew(), false);
680 680
681 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 681 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
682 682
683 // Make sure that new data is persisted to Local State. 683 // Make sure that new data is persisted to Local State.
684 GetLocalState()->CommitPendingWrite(); 684 GetLocalState()->CommitPendingWrite();
685 } 685 }
686 686
687 void ChromeUserManagerImpl::RegularUserLoggedInAsEphemeral( 687 void ChromeUserManagerImpl::RegularUserLoggedInAsEphemeral(
688 const std::string& user_id) { 688 const AccountId& account_id) {
689 DCHECK_CURRENTLY_ON(BrowserThread::UI); 689 DCHECK_CURRENTLY_ON(BrowserThread::UI);
690 ChromeUserManager::RegularUserLoggedInAsEphemeral(user_id); 690 ChromeUserManager::RegularUserLoggedInAsEphemeral(account_id);
691 691
692 GetUserImageManager(user_id)->UserLoggedIn(IsCurrentUserNew(), false); 692 GetUserImageManager(account_id)->UserLoggedIn(IsCurrentUserNew(), false);
693 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 693 WallpaperManager::Get()->SetUserWallpaperNow(account_id.GetUserEmail());
694 } 694 }
695 695
696 void ChromeUserManagerImpl::SupervisedUserLoggedIn(const std::string& user_id) { 696 void ChromeUserManagerImpl::SupervisedUserLoggedIn(
697 const AccountId& account_id) {
697 // TODO(nkostylev): Refactor, share code with RegularUserLoggedIn(). 698 // TODO(nkostylev): Refactor, share code with RegularUserLoggedIn().
698 699
699 // Remove the user from the user list. 700 // Remove the user from the user list.
700 active_user_ = RemoveRegularOrSupervisedUserFromList(user_id); 701 active_user_ = RemoveRegularOrSupervisedUserFromList(account_id);
701 702
702 // If the user was not found on the user list, create a new user. 703 // If the user was not found on the user list, create a new user.
703 if (!GetActiveUser()) { 704 if (!GetActiveUser()) {
704 SetIsCurrentUserNew(true); 705 SetIsCurrentUserNew(true);
705 active_user_ = user_manager::User::CreateSupervisedUser(user_id); 706 active_user_ = user_manager::User::CreateSupervisedUser(account_id);
706 // Leaving OAuth token status at the default state = unknown. 707 // Leaving OAuth token status at the default state = unknown.
707 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 708 WallpaperManager::Get()->SetUserWallpaperNow(account_id.GetUserEmail());
708 } else { 709 } else {
709 if (supervised_user_manager_->CheckForFirstRun(user_id)) { 710 if (supervised_user_manager_->CheckForFirstRun(account_id.GetUserEmail())) {
710 SetIsCurrentUserNew(true); 711 SetIsCurrentUserNew(true);
711 WallpaperManager::Get()->SetUserWallpaperNow(user_id); 712 WallpaperManager::Get()->SetUserWallpaperNow(account_id.GetUserEmail());
712 } else { 713 } else {
713 SetIsCurrentUserNew(false); 714 SetIsCurrentUserNew(false);
714 } 715 }
715 } 716 }
716 717
717 // Add the user to the front of the user list. 718 // Add the user to the front of the user list.
718 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers); 719 ListPrefUpdate prefs_users_update(GetLocalState(), kRegularUsers);
719 prefs_users_update->Insert(0, new base::StringValue(user_id)); 720 prefs_users_update->Insert(0,
721 new base::StringValue(account_id.GetUserEmail()));
720 users_.insert(users_.begin(), active_user_); 722 users_.insert(users_.begin(), active_user_);
721 723
722 // Now that user is in the list, save display name. 724 // Now that user is in the list, save display name.
723 if (IsCurrentUserNew()) { 725 if (IsCurrentUserNew()) {
724 SaveUserDisplayName(GetActiveUser()->email(), 726 SaveUserDisplayName(GetActiveUser()->GetAccountId(),
725 GetActiveUser()->GetDisplayName()); 727 GetActiveUser()->GetDisplayName());
726 } 728 }
727 729
728 GetUserImageManager(user_id)->UserLoggedIn(IsCurrentUserNew(), true); 730 GetUserImageManager(account_id)->UserLoggedIn(IsCurrentUserNew(), true);
729 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 731 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
730 732
731 // Make sure that new data is persisted to Local State. 733 // Make sure that new data is persisted to Local State.
732 GetLocalState()->CommitPendingWrite(); 734 GetLocalState()->CommitPendingWrite();
733 } 735 }
734 736
735 bool ChromeUserManagerImpl::HasPendingBootstrap( 737 bool ChromeUserManagerImpl::HasPendingBootstrap(
736 const std::string& user_id) const { 738 const AccountId& account_id) const {
737 return bootstrap_manager_->HasPendingBootstrap(user_id); 739 return bootstrap_manager_->HasPendingBootstrap(account_id.GetUserEmail());
738 } 740 }
739 741
740 void ChromeUserManagerImpl::PublicAccountUserLoggedIn( 742 void ChromeUserManagerImpl::PublicAccountUserLoggedIn(
741 user_manager::User* user) { 743 user_manager::User* user) {
742 SetIsCurrentUserNew(true); 744 SetIsCurrentUserNew(true);
743 active_user_ = user; 745 active_user_ = user;
744 746
745 // The UserImageManager chooses a random avatar picture when a user logs in 747 // The UserImageManager chooses a random avatar picture when a user logs in
746 // for the first time. Tell the UserImageManager that this user is not new to 748 // for the first time. Tell the UserImageManager that this user is not new to
747 // prevent the avatar from getting changed. 749 // prevent the avatar from getting changed.
748 GetUserImageManager(user->email())->UserLoggedIn(false, true); 750 GetUserImageManager(user->GetAccountId())->UserLoggedIn(false, true);
749 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); 751 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded();
750 } 752 }
751 753
752 void ChromeUserManagerImpl::KioskAppLoggedIn(const std::string& app_id) { 754 void ChromeUserManagerImpl::KioskAppLoggedIn(
755 const AccountId& kiosk_app_account_id) {
753 DCHECK_CURRENTLY_ON(BrowserThread::UI); 756 DCHECK_CURRENTLY_ON(BrowserThread::UI);
754 policy::DeviceLocalAccount::Type device_local_account_type; 757 policy::DeviceLocalAccount::Type device_local_account_type;
755 DCHECK(policy::IsDeviceLocalAccountUser(app_id, &device_local_account_type)); 758 DCHECK(policy::IsDeviceLocalAccountUser(kiosk_app_account_id.GetUserEmail(),
759 &device_local_account_type));
756 DCHECK_EQ(policy::DeviceLocalAccount::TYPE_KIOSK_APP, 760 DCHECK_EQ(policy::DeviceLocalAccount::TYPE_KIOSK_APP,
757 device_local_account_type); 761 device_local_account_type);
758 762
759 active_user_ = user_manager::User::CreateKioskAppUser(app_id); 763 active_user_ = user_manager::User::CreateKioskAppUser(kiosk_app_account_id);
760 active_user_->SetStubImage( 764 active_user_->SetStubImage(
761 user_manager::UserImage( 765 user_manager::UserImage(
762 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 766 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
763 IDR_PROFILE_PICTURE_LOADING)), 767 IDR_PROFILE_PICTURE_LOADING)),
764 user_manager::User::USER_IMAGE_INVALID, 768 user_manager::User::USER_IMAGE_INVALID,
765 false); 769 false);
766 770
767 WallpaperManager::Get()->SetUserWallpaperNow(app_id); 771 WallpaperManager::Get()->SetUserWallpaperNow(
772 kiosk_app_account_id.GetUserEmail());
768 773
769 // TODO(bartfab): Add KioskAppUsers to the users_ list and keep metadata like 774 // TODO(bartfab): Add KioskAppUsers to the users_ list and keep metadata like
770 // the kiosk_app_id in these objects, removing the need to re-parse the 775 // the kiosk_app_id in these objects, removing the need to re-parse the
771 // device-local account list here to extract the kiosk_app_id. 776 // device-local account list here to extract the kiosk_app_id.
772 const std::vector<policy::DeviceLocalAccount> device_local_accounts = 777 const std::vector<policy::DeviceLocalAccount> device_local_accounts =
773 policy::GetDeviceLocalAccounts(cros_settings_); 778 policy::GetDeviceLocalAccounts(cros_settings_);
774 const policy::DeviceLocalAccount* account = NULL; 779 const policy::DeviceLocalAccount* account = NULL;
775 for (std::vector<policy::DeviceLocalAccount>::const_iterator it = 780 for (std::vector<policy::DeviceLocalAccount>::const_iterator it =
776 device_local_accounts.begin(); 781 device_local_accounts.begin();
777 it != device_local_accounts.end(); 782 it != device_local_accounts.end();
778 ++it) { 783 ++it) {
779 if (it->user_id == app_id) { 784 if (it->user_id == kiosk_app_account_id.GetUserEmail()) {
780 account = &*it; 785 account = &*it;
781 break; 786 break;
782 } 787 }
783 } 788 }
784 std::string kiosk_app_id; 789 std::string kiosk_app_name;
785 if (account) { 790 if (account) {
786 kiosk_app_id = account->kiosk_app_id; 791 kiosk_app_name = account->kiosk_app_id;
787 } else { 792 } else {
788 LOG(ERROR) << "Logged into nonexistent kiosk-app account: " << app_id; 793 LOG(ERROR) << "Logged into nonexistent kiosk-app account: "
794 << kiosk_app_account_id.GetUserEmail();
789 NOTREACHED(); 795 NOTREACHED();
790 } 796 }
791 797
792 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 798 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
793 command_line->AppendSwitch(::switches::kForceAppMode); 799 command_line->AppendSwitch(::switches::kForceAppMode);
794 command_line->AppendSwitchASCII(::switches::kAppId, kiosk_app_id); 800 command_line->AppendSwitchASCII(::switches::kAppId, kiosk_app_name);
795 801
796 // Disable window animation since kiosk app runs in a single full screen 802 // Disable window animation since kiosk app runs in a single full screen
797 // window and window animation causes start-up janks. 803 // window and window animation causes start-up janks.
798 command_line->AppendSwitch(wm::switches::kWindowAnimationsDisabled); 804 command_line->AppendSwitch(wm::switches::kWindowAnimationsDisabled);
799 } 805 }
800 806
801 void ChromeUserManagerImpl::DemoAccountLoggedIn() { 807 void ChromeUserManagerImpl::DemoAccountLoggedIn() {
802 DCHECK_CURRENTLY_ON(BrowserThread::UI); 808 DCHECK_CURRENTLY_ON(BrowserThread::UI);
803 active_user_ = user_manager::User::CreateKioskAppUser( 809 active_user_ = user_manager::User::CreateKioskAppUser(login::DemoAccountId());
804 login::DemoAccountId().GetUserEmail());
805 active_user_->SetStubImage( 810 active_user_->SetStubImage(
806 user_manager::UserImage( 811 user_manager::UserImage(
807 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 812 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
808 IDR_PROFILE_PICTURE_LOADING)), 813 IDR_PROFILE_PICTURE_LOADING)),
809 user_manager::User::USER_IMAGE_INVALID, 814 user_manager::User::USER_IMAGE_INVALID,
810 false); 815 false);
811 WallpaperManager::Get()->SetUserWallpaperNow( 816 WallpaperManager::Get()->SetUserWallpaperNow(
812 login::DemoAccountId().GetUserEmail()); 817 login::DemoAccountId().GetUserEmail());
813 818
814 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 819 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
(...skipping 27 matching lines...) Expand all
842 847
843 void ChromeUserManagerImpl::UpdateOwnership() { 848 void ChromeUserManagerImpl::UpdateOwnership() {
844 bool is_owner = 849 bool is_owner =
845 FakeOwnership() || DeviceSettingsService::Get()->HasPrivateOwnerKey(); 850 FakeOwnership() || DeviceSettingsService::Get()->HasPrivateOwnerKey();
846 VLOG(1) << "Current user " << (is_owner ? "is owner" : "is not owner"); 851 VLOG(1) << "Current user " << (is_owner ? "is owner" : "is not owner");
847 852
848 SetCurrentUserIsOwner(is_owner); 853 SetCurrentUserIsOwner(is_owner);
849 } 854 }
850 855
851 void ChromeUserManagerImpl::RemoveNonCryptohomeData( 856 void ChromeUserManagerImpl::RemoveNonCryptohomeData(
852 const std::string& user_id) { 857 const AccountId& account_id) {
853 ChromeUserManager::RemoveNonCryptohomeData(user_id); 858 ChromeUserManager::RemoveNonCryptohomeData(account_id);
854 859
855 WallpaperManager::Get()->RemoveUserWallpaperInfo(user_id); 860 WallpaperManager::Get()->RemoveUserWallpaperInfo(account_id.GetUserEmail());
856 GetUserImageManager(user_id)->DeleteUserImage(); 861 GetUserImageManager(account_id)->DeleteUserImage();
857 862
858 supervised_user_manager_->RemoveNonCryptohomeData(user_id); 863 supervised_user_manager_->RemoveNonCryptohomeData(account_id.GetUserEmail());
859 864
860 multi_profile_user_controller_->RemoveCachedValues(user_id); 865 multi_profile_user_controller_->RemoveCachedValues(account_id.GetUserEmail());
861 866
862 EasyUnlockService::ResetLocalStateForUser(user_id); 867 EasyUnlockService::ResetLocalStateForUser(account_id.GetUserEmail());
863 } 868 }
864 869
865 void 870 void
866 ChromeUserManagerImpl::CleanUpPublicAccountNonCryptohomeDataPendingRemoval() { 871 ChromeUserManagerImpl::CleanUpPublicAccountNonCryptohomeDataPendingRemoval() {
867 PrefService* local_state = GetLocalState(); 872 PrefService* local_state = GetLocalState();
868 const std::string public_account_pending_data_removal = 873 const std::string public_account_pending_data_removal =
869 local_state->GetString(kPublicAccountPendingDataRemoval); 874 local_state->GetString(kPublicAccountPendingDataRemoval);
870 if (public_account_pending_data_removal.empty() || 875 if (public_account_pending_data_removal.empty() ||
871 (IsUserLoggedIn() && 876 (IsUserLoggedIn() &&
872 public_account_pending_data_removal == GetActiveUser()->email())) { 877 public_account_pending_data_removal == GetActiveUser()->email())) {
873 return; 878 return;
874 } 879 }
875 880
876 RemoveNonCryptohomeData(public_account_pending_data_removal); 881 RemoveNonCryptohomeData(
882 AccountId::FromUserEmail(public_account_pending_data_removal));
877 local_state->ClearPref(kPublicAccountPendingDataRemoval); 883 local_state->ClearPref(kPublicAccountPendingDataRemoval);
878 } 884 }
879 885
880 void ChromeUserManagerImpl::CleanUpPublicAccountNonCryptohomeData( 886 void ChromeUserManagerImpl::CleanUpPublicAccountNonCryptohomeData(
881 const std::vector<std::string>& old_public_accounts) { 887 const std::vector<std::string>& old_public_accounts) {
882 std::set<std::string> users; 888 std::set<std::string> users;
883 for (user_manager::UserList::const_iterator it = users_.begin(); 889 for (user_manager::UserList::const_iterator it = users_.begin();
884 it != users_.end(); 890 it != users_.end();
885 ++it) 891 ++it)
886 users.insert((*it)->email()); 892 users.insert((*it)->email());
887 893
888 // If the user is logged into a public account that has been removed from the 894 // If the user is logged into a public account that has been removed from the
889 // user list, mark the account's data as pending removal after logout. 895 // user list, mark the account's data as pending removal after logout.
890 if (IsLoggedInAsPublicAccount()) { 896 if (IsLoggedInAsPublicAccount()) {
891 const std::string active_user_id = GetActiveUser()->email(); 897 const std::string active_user_id = GetActiveUser()->email();
892 if (users.find(active_user_id) == users.end()) { 898 if (users.find(active_user_id) == users.end()) {
893 GetLocalState()->SetString(kPublicAccountPendingDataRemoval, 899 GetLocalState()->SetString(kPublicAccountPendingDataRemoval,
894 active_user_id); 900 active_user_id);
895 users.insert(active_user_id); 901 users.insert(active_user_id);
896 } 902 }
897 } 903 }
898 904
899 // Remove the data belonging to any other public accounts that are no longer 905 // Remove the data belonging to any other public accounts that are no longer
900 // found on the user list. 906 // found on the user list.
901 for (std::vector<std::string>::const_iterator it = 907 for (std::vector<std::string>::const_iterator it =
902 old_public_accounts.begin(); 908 old_public_accounts.begin();
903 it != old_public_accounts.end(); 909 it != old_public_accounts.end();
904 ++it) { 910 ++it) {
905 if (users.find(*it) == users.end()) 911 if (users.find(*it) == users.end())
906 RemoveNonCryptohomeData(*it); 912 RemoveNonCryptohomeData(AccountId::FromUserEmail(*it));
907 } 913 }
908 } 914 }
909 915
910 bool ChromeUserManagerImpl::UpdateAndCleanUpPublicAccounts( 916 bool ChromeUserManagerImpl::UpdateAndCleanUpPublicAccounts(
911 const std::vector<policy::DeviceLocalAccount>& device_local_accounts) { 917 const std::vector<policy::DeviceLocalAccount>& device_local_accounts) {
912 // Try to remove any public account data marked as pending removal. 918 // Try to remove any public account data marked as pending removal.
913 CleanUpPublicAccountNonCryptohomeDataPendingRemoval(); 919 CleanUpPublicAccountNonCryptohomeDataPendingRemoval();
914 920
915 // Get the current list of public accounts. 921 // Get the current list of public accounts.
916 std::vector<std::string> old_public_accounts; 922 std::vector<std::string> old_public_accounts;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 } 975 }
970 976
971 // Add the new public accounts to the front of the user list. 977 // Add the new public accounts to the front of the user list.
972 for (std::vector<std::string>::const_reverse_iterator it = 978 for (std::vector<std::string>::const_reverse_iterator it =
973 new_public_accounts.rbegin(); 979 new_public_accounts.rbegin();
974 it != new_public_accounts.rend(); 980 it != new_public_accounts.rend();
975 ++it) { 981 ++it) {
976 if (IsLoggedInAsPublicAccount() && *it == GetActiveUser()->email()) 982 if (IsLoggedInAsPublicAccount() && *it == GetActiveUser()->email())
977 users_.insert(users_.begin(), GetLoggedInUser()); 983 users_.insert(users_.begin(), GetLoggedInUser());
978 else 984 else
979 users_.insert(users_.begin(), 985 users_.insert(users_.begin(), user_manager::User::CreatePublicAccountUser(
980 user_manager::User::CreatePublicAccountUser(*it)); 986 AccountId::FromUserEmail(*it)));
981 UpdatePublicAccountDisplayName(*it); 987 UpdatePublicAccountDisplayName(*it);
982 } 988 }
983 989
984 for (user_manager::UserList::iterator 990 for (user_manager::UserList::iterator
985 ui = users_.begin(), 991 ui = users_.begin(),
986 ue = users_.begin() + new_public_accounts.size(); 992 ue = users_.begin() + new_public_accounts.size();
987 ui != ue; 993 ui != ue;
988 ++ui) { 994 ++ui) {
989 GetUserImageManager((*ui)->email())->LoadUserImage(); 995 GetUserImageManager((*ui)->GetAccountId())->LoadUserImage();
990 } 996 }
991 997
992 // Remove data belonging to public accounts that are no longer found on the 998 // Remove data belonging to public accounts that are no longer found on the
993 // user list. 999 // user list.
994 CleanUpPublicAccountNonCryptohomeData(old_public_accounts); 1000 CleanUpPublicAccountNonCryptohomeData(old_public_accounts);
995 1001
996 return true; 1002 return true;
997 } 1003 }
998 1004
999 void ChromeUserManagerImpl::UpdatePublicAccountDisplayName( 1005 void ChromeUserManagerImpl::UpdatePublicAccountDisplayName(
1000 const std::string& user_id) { 1006 const std::string& user_id) {
1001 std::string display_name; 1007 std::string display_name;
1002 1008
1003 if (device_local_account_policy_service_) { 1009 if (device_local_account_policy_service_) {
1004 policy::DeviceLocalAccountPolicyBroker* broker = 1010 policy::DeviceLocalAccountPolicyBroker* broker =
1005 device_local_account_policy_service_->GetBrokerForUser(user_id); 1011 device_local_account_policy_service_->GetBrokerForUser(user_id);
1006 if (broker) 1012 if (broker)
1007 display_name = broker->GetDisplayName(); 1013 display_name = broker->GetDisplayName();
1008 } 1014 }
1009 1015
1010 // Set or clear the display name. 1016 // Set or clear the display name.
1011 SaveUserDisplayName(user_id, base::UTF8ToUTF16(display_name)); 1017 SaveUserDisplayName(AccountId::FromUserEmail(user_id),
1018 base::UTF8ToUTF16(display_name));
1012 } 1019 }
1013 1020
1014 UserFlow* ChromeUserManagerImpl::GetCurrentUserFlow() const { 1021 UserFlow* ChromeUserManagerImpl::GetCurrentUserFlow() const {
1015 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1022 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1016 if (!IsUserLoggedIn()) 1023 if (!IsUserLoggedIn())
1017 return GetDefaultUserFlow(); 1024 return GetDefaultUserFlow();
1018 return GetUserFlow(GetLoggedInUser()->email()); 1025 return GetUserFlow(GetLoggedInUser()->GetAccountId());
1019 } 1026 }
1020 1027
1021 UserFlow* ChromeUserManagerImpl::GetUserFlow(const std::string& user_id) const { 1028 UserFlow* ChromeUserManagerImpl::GetUserFlow(
1029 const AccountId& account_id) const {
1022 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1030 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1023 FlowMap::const_iterator it = specific_flows_.find(user_id); 1031 FlowMap::const_iterator it = specific_flows_.find(account_id);
1024 if (it != specific_flows_.end()) 1032 if (it != specific_flows_.end())
1025 return it->second; 1033 return it->second;
1026 return GetDefaultUserFlow(); 1034 return GetDefaultUserFlow();
1027 } 1035 }
1028 1036
1029 void ChromeUserManagerImpl::SetUserFlow(const std::string& user_id, 1037 void ChromeUserManagerImpl::SetUserFlow(const AccountId& account_id,
1030 UserFlow* flow) { 1038 UserFlow* flow) {
1031 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1039 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1032 ResetUserFlow(user_id); 1040 ResetUserFlow(account_id);
1033 specific_flows_[user_id] = flow; 1041 specific_flows_[account_id] = flow;
1034 } 1042 }
1035 1043
1036 void ChromeUserManagerImpl::ResetUserFlow(const std::string& user_id) { 1044 void ChromeUserManagerImpl::ResetUserFlow(const AccountId& account_id) {
1037 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1045 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1038 FlowMap::iterator it = specific_flows_.find(user_id); 1046 FlowMap::iterator it = specific_flows_.find(account_id);
1039 if (it != specific_flows_.end()) { 1047 if (it != specific_flows_.end()) {
1040 delete it->second; 1048 delete it->second;
1041 specific_flows_.erase(it); 1049 specific_flows_.erase(it);
1042 } 1050 }
1043 } 1051 }
1044 1052
1045 bool ChromeUserManagerImpl::AreSupervisedUsersAllowed() const { 1053 bool ChromeUserManagerImpl::AreSupervisedUsersAllowed() const {
1046 bool supervised_users_allowed = false; 1054 bool supervised_users_allowed = false;
1047 cros_settings_->GetBoolean(kAccountsPrefSupervisedUsersEnabled, 1055 cros_settings_->GetBoolean(kAccountsPrefSupervisedUsersEnabled,
1048 &supervised_users_allowed); 1056 &supervised_users_allowed);
(...skipping 16 matching lines...) Expand all
1065 1073
1066 void ChromeUserManagerImpl::NotifyUserAddedToSession( 1074 void ChromeUserManagerImpl::NotifyUserAddedToSession(
1067 const user_manager::User* added_user, 1075 const user_manager::User* added_user,
1068 bool user_switch_pending) { 1076 bool user_switch_pending) {
1069 // Special case for user session restoration after browser crash. 1077 // Special case for user session restoration after browser crash.
1070 // We don't switch to each user session that has been restored as once all 1078 // We don't switch to each user session that has been restored as once all
1071 // session will be restored we'll switch to the session that has been used 1079 // session will be restored we'll switch to the session that has been used
1072 // before the crash. 1080 // before the crash.
1073 if (user_switch_pending && 1081 if (user_switch_pending &&
1074 !UserSessionManager::GetInstance()->UserSessionsRestoreInProgress()) { 1082 !UserSessionManager::GetInstance()->UserSessionsRestoreInProgress()) {
1075 SetPendingUserSwitchID(added_user->email()); 1083 SetPendingUserSwitchId(added_user->GetAccountId());
1076 } 1084 }
1077 1085
1078 UpdateNumberOfUsers(); 1086 UpdateNumberOfUsers();
1079 ChromeUserManager::NotifyUserAddedToSession(added_user, user_switch_pending); 1087 ChromeUserManager::NotifyUserAddedToSession(added_user, user_switch_pending);
1080 } 1088 }
1081 1089
1082 void ChromeUserManagerImpl::OnUserNotAllowed(const std::string& user_email) { 1090 void ChromeUserManagerImpl::OnUserNotAllowed(const std::string& user_email) {
1083 LOG(ERROR) << "Shutdown session because a user is not allowed to be in the " 1091 LOG(ERROR) << "Shutdown session because a user is not allowed to be in the "
1084 "current session"; 1092 "current session";
1085 chromeos::ShowMultiprofilesSessionAbortedDialog(user_email); 1093 chromeos::ShowMultiprofilesSessionAbortedDialog(user_email);
1086 } 1094 }
1087 1095
1088 void ChromeUserManagerImpl::RemovePendingBootstrapUser( 1096 void ChromeUserManagerImpl::RemovePendingBootstrapUser(
1089 const std::string& user_id) { 1097 const std::string& user_id) {
1090 DCHECK(HasPendingBootstrap(user_id)); 1098 const AccountId account_id(AccountId::FromUserEmail(user_id));
1091 RemoveNonOwnerUserInternal(user_id, NULL); 1099 DCHECK(HasPendingBootstrap(account_id));
1100 RemoveNonOwnerUserInternal(account_id, nullptr);
1092 } 1101 }
1093 1102
1094 void ChromeUserManagerImpl::UpdateNumberOfUsers() { 1103 void ChromeUserManagerImpl::UpdateNumberOfUsers() {
1095 size_t users = GetLoggedInUsers().size(); 1104 size_t users = GetLoggedInUsers().size();
1096 if (users) { 1105 if (users) {
1097 // Write the user number as UMA stat when a multi user session is possible. 1106 // Write the user number as UMA stat when a multi user session is possible.
1098 if ((users + GetUsersAllowedForMultiProfile().size()) > 1) 1107 if ((users + GetUsersAllowedForMultiProfile().size()) > 1)
1099 ash::MultiProfileUMA::RecordUserCount(users); 1108 ash::MultiProfileUMA::RecordUserCount(users);
1100 } 1109 }
1101 1110
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 g_browser_process->platform_part()->GetTimezoneResolver()->Start(); 1144 g_browser_process->platform_part()->GetTimezoneResolver()->Start();
1136 } else { 1145 } else {
1137 g_browser_process->platform_part()->GetTimezoneResolver()->Stop(); 1146 g_browser_process->platform_part()->GetTimezoneResolver()->Stop();
1138 } 1147 }
1139 } 1148 }
1140 1149
1141 void ChromeUserManagerImpl::SetUserAffiliation( 1150 void ChromeUserManagerImpl::SetUserAffiliation(
1142 const std::string& user_email, 1151 const std::string& user_email,
1143 const AffiliationIDSet& user_affiliation_ids) { 1152 const AffiliationIDSet& user_affiliation_ids) {
1144 std::string canonicalized_email = FullyCanonicalize(user_email); 1153 std::string canonicalized_email = FullyCanonicalize(user_email);
1145 user_manager::User* user = FindUserAndModify(canonicalized_email); 1154 user_manager::User* user =
1155 FindUserAndModify(AccountId::FromUserEmail(canonicalized_email));
1146 1156
1147 if (user) { 1157 if (user) {
1148 policy::BrowserPolicyConnectorChromeOS const* const connector = 1158 policy::BrowserPolicyConnectorChromeOS const* const connector =
1149 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1159 g_browser_process->platform_part()->browser_policy_connector_chromeos();
1150 const bool is_affiliated = chromeos::IsUserAffiliated( 1160 const bool is_affiliated = chromeos::IsUserAffiliated(
1151 user_affiliation_ids, connector->GetDeviceAffiliationIDs(), 1161 user_affiliation_ids, connector->GetDeviceAffiliationIDs(),
1152 canonicalized_email, connector->GetEnterpriseDomain()); 1162 canonicalized_email, connector->GetEnterpriseDomain());
1153 user->set_affiliation(is_affiliated); 1163 user->set_affiliation(is_affiliated);
1154 1164
1155 if (user->GetType() == user_manager::USER_TYPE_REGULAR) { 1165 if (user->GetType() == user_manager::USER_TYPE_REGULAR) {
(...skipping 18 matching lines...) Expand all
1174 users_update->AppendIfNotPresent( 1184 users_update->AppendIfNotPresent(
1175 new base::StringValue(FullyCanonicalize(user_id))); 1185 new base::StringValue(FullyCanonicalize(user_id)));
1176 } 1186 }
1177 1187
1178 void ChromeUserManagerImpl::RemoveReportingUser(const std::string& user_id) { 1188 void ChromeUserManagerImpl::RemoveReportingUser(const std::string& user_id) {
1179 ListPrefUpdate users_update(GetLocalState(), kReportingUsers); 1189 ListPrefUpdate users_update(GetLocalState(), kReportingUsers);
1180 users_update->Remove(base::StringValue(FullyCanonicalize(user_id)), NULL); 1190 users_update->Remove(base::StringValue(FullyCanonicalize(user_id)), NULL);
1181 } 1191 }
1182 1192
1183 } // namespace chromeos 1193 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698