user_manager.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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
  3. // found in the LICENSE file.
  4. #include "components/user_manager/user_manager.h"
  5. #include "base/logging.h"
  6. #include "components/account_id/account_id.h"
  7. namespace user_manager {
  8. const char kRegularUsersPref[] = "LoggedInUsers";
  9. UserManager* UserManager::instance = nullptr;
  10. UserManager::Observer::~Observer() = default;
  11. void UserManager::Observer::LocalStateChanged(UserManager* user_manager) {}
  12. void UserManager::Observer::OnUserImageChanged(const User& user) {}
  13. void UserManager::Observer::OnUserImageIsEnterpriseManagedChanged(
  14. const User& user,
  15. bool is_enterprise_managed) {}
  16. void UserManager::Observer::OnUserProfileImageUpdateFailed(const User& user) {}
  17. void UserManager::Observer::OnUserProfileImageUpdated(
  18. const User& user,
  19. const gfx::ImageSkia& profile_image) {}
  20. void UserManager::Observer::OnUsersSignInConstraintsChanged() {}
  21. void UserManager::Observer::OnUserRemoved(const AccountId& account_id,
  22. UserRemovalReason reason) {}
  23. void UserManager::Observer::OnUserToBeRemoved(const AccountId& account_id) {}
  24. void UserManager::UserSessionStateObserver::ActiveUserChanged(
  25. User* active_user) {}
  26. void UserManager::UserSessionStateObserver::UserAddedToSession(
  27. const User* active_user) {}
  28. void UserManager::UserSessionStateObserver::ActiveUserHashChanged(
  29. const std::string& hash) {}
  30. UserManager::UserSessionStateObserver::~UserSessionStateObserver() {}
  31. UserManager::UserAccountData::UserAccountData(
  32. const std::u16string& display_name,
  33. const std::u16string& given_name,
  34. const std::string& locale)
  35. : display_name_(display_name), given_name_(given_name), locale_(locale) {}
  36. UserManager::UserAccountData::~UserAccountData() {}
  37. void UserManager::Initialize() {
  38. DCHECK(!UserManager::instance);
  39. UserManager::SetInstance(this);
  40. }
  41. // static
  42. bool UserManager::IsInitialized() {
  43. return UserManager::instance;
  44. }
  45. void UserManager::Destroy() {
  46. DCHECK(UserManager::instance == this);
  47. UserManager::SetInstance(nullptr);
  48. }
  49. // static
  50. UserManager* user_manager::UserManager::Get() {
  51. CHECK(UserManager::instance);
  52. return UserManager::instance;
  53. }
  54. UserManager::~UserManager() {
  55. }
  56. // static
  57. void UserManager::SetInstance(UserManager* user_manager) {
  58. UserManager::instance = user_manager;
  59. }
  60. // static
  61. UserManager* user_manager::UserManager::GetForTesting() {
  62. return UserManager::instance;
  63. }
  64. // static
  65. UserManager* UserManager::SetForTesting(UserManager* user_manager) {
  66. UserManager* previous_instance = UserManager::instance;
  67. UserManager::instance = user_manager;
  68. return previous_instance;
  69. }
  70. UserType UserManager::CalculateUserType(const AccountId& account_id,
  71. const User* user,
  72. const bool browser_restart,
  73. const bool is_child) const {
  74. if (IsGuestAccountId(account_id))
  75. return USER_TYPE_GUEST;
  76. // This may happen after browser crash after device account was marked for
  77. // removal, but before clean exit.
  78. if (browser_restart && IsDeviceLocalAccountMarkedForRemoval(account_id))
  79. return USER_TYPE_PUBLIC_ACCOUNT;
  80. // If user already exists
  81. if (user) {
  82. // This branch works for any other user type, including PUBLIC_ACCOUNT.
  83. const UserType user_type = user->GetType();
  84. if (user_type == USER_TYPE_CHILD || user_type == USER_TYPE_REGULAR) {
  85. const UserType new_user_type =
  86. is_child ? USER_TYPE_CHILD : USER_TYPE_REGULAR;
  87. if (new_user_type != user_type) {
  88. LOG(WARNING) << "Child user type has changed: " << user_type << " => "
  89. << new_user_type;
  90. }
  91. return new_user_type;
  92. } else if (is_child) {
  93. LOG(FATAL) << "Incorrect child user type " << user_type;
  94. }
  95. // TODO(rsorokin): Check for reverse: account_id AD type should imply
  96. // AD user type.
  97. if (user_type == USER_TYPE_ACTIVE_DIRECTORY &&
  98. account_id.GetAccountType() != AccountType::ACTIVE_DIRECTORY) {
  99. LOG(FATAL) << "Incorrect AD user type " << user_type;
  100. }
  101. return user_type;
  102. }
  103. // User is new
  104. if (is_child)
  105. return USER_TYPE_CHILD;
  106. if (account_id.GetAccountType() == AccountType::ACTIVE_DIRECTORY)
  107. return USER_TYPE_ACTIVE_DIRECTORY;
  108. return USER_TYPE_REGULAR;
  109. }
  110. } // namespace user_manager