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