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