| OLD | NEW |
| (Empty) |
| 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 | |
| 5 #include "chrome/browser/chromeos/login/users/user.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "base/strings/stringprintf.h" | |
| 9 #include "base/strings/utf_string_conversions.h" | |
| 10 #include "base/threading/thread_restrictions.h" | |
| 11 #include "chrome/browser/chromeos/login/users/user_manager.h" | |
| 12 #include "chromeos/login/user_names.h" | |
| 13 #include "components/user_manager/user_image/default_user_images.h" | |
| 14 #include "google_apis/gaia/gaia_auth_util.h" | |
| 15 #include "grit/theme_resources.h" | |
| 16 #include "ui/base/resource/resource_bundle.h" | |
| 17 | |
| 18 namespace chromeos { | |
| 19 | |
| 20 namespace { | |
| 21 | |
| 22 // Returns account name portion of an email. | |
| 23 std::string GetUserName(const std::string& email) { | |
| 24 std::string::size_type i = email.find('@'); | |
| 25 if (i == 0 || i == std::string::npos) { | |
| 26 return email; | |
| 27 } | |
| 28 return email.substr(0, i); | |
| 29 } | |
| 30 | |
| 31 } // namespace | |
| 32 | |
| 33 const int User::kExternalImageIndex; | |
| 34 const int User::kProfileImageIndex; | |
| 35 const int User::kInvalidImageIndex; | |
| 36 | |
| 37 class RegularUser : public User { | |
| 38 public: | |
| 39 explicit RegularUser(const std::string& email); | |
| 40 virtual ~RegularUser(); | |
| 41 | |
| 42 // Overridden from User: | |
| 43 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 44 virtual bool CanSyncImage() const OVERRIDE; | |
| 45 | |
| 46 private: | |
| 47 DISALLOW_COPY_AND_ASSIGN(RegularUser); | |
| 48 }; | |
| 49 | |
| 50 class GuestUser : public User { | |
| 51 public: | |
| 52 GuestUser(); | |
| 53 virtual ~GuestUser(); | |
| 54 | |
| 55 // Overridden from User: | |
| 56 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 57 | |
| 58 private: | |
| 59 DISALLOW_COPY_AND_ASSIGN(GuestUser); | |
| 60 }; | |
| 61 | |
| 62 class KioskAppUser : public User { | |
| 63 public: | |
| 64 explicit KioskAppUser(const std::string& app_id); | |
| 65 virtual ~KioskAppUser(); | |
| 66 | |
| 67 // Overridden from User: | |
| 68 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 69 | |
| 70 private: | |
| 71 DISALLOW_COPY_AND_ASSIGN(KioskAppUser); | |
| 72 }; | |
| 73 | |
| 74 class SupervisedUser : public User { | |
| 75 public: | |
| 76 explicit SupervisedUser(const std::string& username); | |
| 77 virtual ~SupervisedUser(); | |
| 78 | |
| 79 // Overridden from User: | |
| 80 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 81 virtual std::string display_email() const OVERRIDE; | |
| 82 | |
| 83 private: | |
| 84 DISALLOW_COPY_AND_ASSIGN(SupervisedUser); | |
| 85 }; | |
| 86 | |
| 87 class RetailModeUser : public User { | |
| 88 public: | |
| 89 RetailModeUser(); | |
| 90 virtual ~RetailModeUser(); | |
| 91 | |
| 92 // Overridden from User: | |
| 93 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 94 | |
| 95 private: | |
| 96 DISALLOW_COPY_AND_ASSIGN(RetailModeUser); | |
| 97 }; | |
| 98 | |
| 99 class PublicAccountUser : public User { | |
| 100 public: | |
| 101 explicit PublicAccountUser(const std::string& email); | |
| 102 virtual ~PublicAccountUser(); | |
| 103 | |
| 104 // Overridden from User: | |
| 105 virtual user_manager::UserType GetType() const OVERRIDE; | |
| 106 | |
| 107 private: | |
| 108 DISALLOW_COPY_AND_ASSIGN(PublicAccountUser); | |
| 109 }; | |
| 110 | |
| 111 std::string User::GetEmail() const { | |
| 112 return display_email(); | |
| 113 } | |
| 114 | |
| 115 base::string16 User::GetDisplayName() const { | |
| 116 // Fallback to the email account name in case display name haven't been set. | |
| 117 return display_name_.empty() ? | |
| 118 base::UTF8ToUTF16(GetAccountName(true)) : | |
| 119 display_name_; | |
| 120 } | |
| 121 | |
| 122 base::string16 User::GetGivenName() const { | |
| 123 return given_name_; | |
| 124 } | |
| 125 | |
| 126 const gfx::ImageSkia& User::GetImage() const { | |
| 127 return user_image_.image(); | |
| 128 } | |
| 129 | |
| 130 std::string User::GetUserID() const { | |
| 131 return gaia::CanonicalizeEmail(gaia::SanitizeEmail(email())); | |
| 132 } | |
| 133 | |
| 134 std::string User::GetAccountName(bool use_display_email) const { | |
| 135 if (use_display_email && !display_email_.empty()) | |
| 136 return GetUserName(display_email_); | |
| 137 else | |
| 138 return GetUserName(email_); | |
| 139 } | |
| 140 | |
| 141 bool User::HasDefaultImage() const { | |
| 142 return image_index_ >= 0 && image_index_ < user_manager::kDefaultImagesCount; | |
| 143 } | |
| 144 | |
| 145 bool User::CanSyncImage() const { | |
| 146 return false; | |
| 147 } | |
| 148 | |
| 149 std::string User::display_email() const { | |
| 150 return display_email_; | |
| 151 } | |
| 152 | |
| 153 bool User::can_lock() const { | |
| 154 return can_lock_; | |
| 155 } | |
| 156 | |
| 157 std::string User::username_hash() const { | |
| 158 return username_hash_; | |
| 159 } | |
| 160 | |
| 161 bool User::is_logged_in() const { | |
| 162 return is_logged_in_; | |
| 163 } | |
| 164 | |
| 165 bool User::is_active() const { | |
| 166 return is_active_; | |
| 167 } | |
| 168 | |
| 169 User* User::CreateRegularUser(const std::string& email) { | |
| 170 return new RegularUser(email); | |
| 171 } | |
| 172 | |
| 173 User* User::CreateGuestUser() { | |
| 174 return new GuestUser; | |
| 175 } | |
| 176 | |
| 177 User* User::CreateKioskAppUser(const std::string& kiosk_app_username) { | |
| 178 return new KioskAppUser(kiosk_app_username); | |
| 179 } | |
| 180 | |
| 181 User* User::CreateSupervisedUser(const std::string& username) { | |
| 182 return new SupervisedUser(username); | |
| 183 } | |
| 184 | |
| 185 User* User::CreateRetailModeUser() { | |
| 186 return new RetailModeUser; | |
| 187 } | |
| 188 | |
| 189 User* User::CreatePublicAccountUser(const std::string& email) { | |
| 190 return new PublicAccountUser(email); | |
| 191 } | |
| 192 | |
| 193 User::User(const std::string& email) | |
| 194 : email_(email), | |
| 195 oauth_token_status_(OAUTH_TOKEN_STATUS_UNKNOWN), | |
| 196 force_online_signin_(false), | |
| 197 image_index_(kInvalidImageIndex), | |
| 198 image_is_stub_(false), | |
| 199 image_is_loading_(false), | |
| 200 can_lock_(false), | |
| 201 is_logged_in_(false), | |
| 202 is_active_(false), | |
| 203 profile_is_created_(false) { | |
| 204 } | |
| 205 | |
| 206 User::~User() {} | |
| 207 | |
| 208 void User::SetAccountLocale(const std::string& resolved_account_locale) { | |
| 209 account_locale_.reset(new std::string(resolved_account_locale)); | |
| 210 } | |
| 211 | |
| 212 void User::SetImage(const user_manager::UserImage& user_image, | |
| 213 int image_index) { | |
| 214 user_image_ = user_image; | |
| 215 image_index_ = image_index; | |
| 216 image_is_stub_ = false; | |
| 217 image_is_loading_ = false; | |
| 218 DCHECK(HasDefaultImage() || user_image.has_raw_image()); | |
| 219 } | |
| 220 | |
| 221 void User::SetImageURL(const GURL& image_url) { | |
| 222 user_image_.set_url(image_url); | |
| 223 } | |
| 224 | |
| 225 void User::SetStubImage(int image_index, bool is_loading) { | |
| 226 user_image_ = user_manager::UserImage( | |
| 227 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
| 228 IDR_PROFILE_PICTURE_LOADING)); | |
| 229 image_index_ = image_index; | |
| 230 image_is_stub_ = true; | |
| 231 image_is_loading_ = is_loading; | |
| 232 } | |
| 233 | |
| 234 RegularUser::RegularUser(const std::string& email) : User(email) { | |
| 235 set_can_lock(true); | |
| 236 set_display_email(email); | |
| 237 } | |
| 238 | |
| 239 RegularUser::~RegularUser() {} | |
| 240 | |
| 241 user_manager::UserType RegularUser::GetType() const { | |
| 242 return user_manager::USER_TYPE_REGULAR; | |
| 243 } | |
| 244 | |
| 245 bool RegularUser::CanSyncImage() const { | |
| 246 return true; | |
| 247 } | |
| 248 | |
| 249 GuestUser::GuestUser() : User(chromeos::login::kGuestUserName) { | |
| 250 set_display_email(std::string()); | |
| 251 } | |
| 252 | |
| 253 GuestUser::~GuestUser() {} | |
| 254 | |
| 255 user_manager::UserType GuestUser::GetType() const { | |
| 256 return user_manager::USER_TYPE_GUEST; | |
| 257 } | |
| 258 | |
| 259 KioskAppUser::KioskAppUser(const std::string& kiosk_app_username) | |
| 260 : User(kiosk_app_username) { | |
| 261 set_display_email(kiosk_app_username); | |
| 262 } | |
| 263 | |
| 264 KioskAppUser::~KioskAppUser() {} | |
| 265 | |
| 266 user_manager::UserType KioskAppUser::GetType() const { | |
| 267 return user_manager::USER_TYPE_KIOSK_APP; | |
| 268 } | |
| 269 | |
| 270 SupervisedUser::SupervisedUser(const std::string& username) | |
| 271 : User(username) { | |
| 272 set_can_lock(true); | |
| 273 } | |
| 274 | |
| 275 SupervisedUser::~SupervisedUser() {} | |
| 276 | |
| 277 user_manager::UserType SupervisedUser::GetType() const { | |
| 278 return user_manager::USER_TYPE_SUPERVISED; | |
| 279 } | |
| 280 | |
| 281 std::string SupervisedUser::display_email() const { | |
| 282 return base::UTF16ToUTF8(display_name()); | |
| 283 } | |
| 284 | |
| 285 RetailModeUser::RetailModeUser() : User(chromeos::login::kRetailModeUserName) { | |
| 286 set_display_email(std::string()); | |
| 287 } | |
| 288 | |
| 289 RetailModeUser::~RetailModeUser() {} | |
| 290 | |
| 291 user_manager::UserType RetailModeUser::GetType() const { | |
| 292 return user_manager::USER_TYPE_RETAIL_MODE; | |
| 293 } | |
| 294 | |
| 295 PublicAccountUser::PublicAccountUser(const std::string& email) : User(email) { | |
| 296 } | |
| 297 | |
| 298 PublicAccountUser::~PublicAccountUser() {} | |
| 299 | |
| 300 user_manager::UserType PublicAccountUser::GetType() const { | |
| 301 return user_manager::USER_TYPE_PUBLIC_ACCOUNT; | |
| 302 } | |
| 303 | |
| 304 bool User::has_gaia_account() const { | |
| 305 COMPILE_ASSERT(user_manager::NUM_USER_TYPES == 6, num_user_types_unexpected); | |
| 306 switch (GetType()) { | |
| 307 case user_manager::USER_TYPE_REGULAR: | |
| 308 return true; | |
| 309 case user_manager::USER_TYPE_GUEST: | |
| 310 case user_manager::USER_TYPE_RETAIL_MODE: | |
| 311 case user_manager::USER_TYPE_PUBLIC_ACCOUNT: | |
| 312 case user_manager::USER_TYPE_SUPERVISED: | |
| 313 case user_manager::USER_TYPE_KIOSK_APP: | |
| 314 return false; | |
| 315 default: | |
| 316 NOTREACHED(); | |
| 317 } | |
| 318 return false; | |
| 319 } | |
| 320 | |
| 321 } // namespace chromeos | |
| OLD | NEW |