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.
5 #include "chrome/browser/chromeos/login/users/user.h"
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/helper.h"
12 #include "chrome/browser/chromeos/login/users/avatar/default_user_images.h"
13 #include "chrome/browser/chromeos/login/users/user_manager.h"
14 #include "google_apis/gaia/gaia_auth_util.h"
15 #include "grit/theme_resources.h"
16 #include "ui/base/resource/resource_bundle.h"
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) {
28 return email.substr(0, i);
33 const int User::kExternalImageIndex;
34 const int User::kProfileImageIndex;
35 const int User::kInvalidImageIndex;
37 class RegularUser : public User {
39 explicit RegularUser(const std::string& email);
40 virtual ~RegularUser();
42 // Overridden from User:
43 virtual UserType GetType() const OVERRIDE;
44 virtual bool CanSyncImage() const OVERRIDE;
47 DISALLOW_COPY_AND_ASSIGN(RegularUser);
50 class GuestUser : public User {
55 // Overridden from User:
56 virtual UserType GetType() const OVERRIDE;
59 DISALLOW_COPY_AND_ASSIGN(GuestUser);
62 class KioskAppUser : public User {
64 explicit KioskAppUser(const std::string& app_id);
65 virtual ~KioskAppUser();
67 // Overridden from User:
68 virtual UserType GetType() const OVERRIDE;
71 DISALLOW_COPY_AND_ASSIGN(KioskAppUser);
74 class LocallyManagedUser : public User {
76 explicit LocallyManagedUser(const std::string& username);
77 virtual ~LocallyManagedUser();
79 // Overridden from User:
80 virtual UserType GetType() const OVERRIDE;
81 virtual std::string display_email() const OVERRIDE;
84 DISALLOW_COPY_AND_ASSIGN(LocallyManagedUser);
87 class RetailModeUser : public User {
90 virtual ~RetailModeUser();
92 // Overridden from User:
93 virtual UserType GetType() const OVERRIDE;
96 DISALLOW_COPY_AND_ASSIGN(RetailModeUser);
99 class PublicAccountUser : public User {
101 explicit PublicAccountUser(const std::string& email);
102 virtual ~PublicAccountUser();
104 // Overridden from User:
105 virtual UserType GetType() const OVERRIDE;
108 DISALLOW_COPY_AND_ASSIGN(PublicAccountUser);
111 std::string User::GetEmail() const {
112 return display_email();
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)) :
122 base::string16 User::GetGivenName() const {
126 const gfx::ImageSkia& User::GetImage() const {
127 return user_image_.image();
130 std::string User::GetUserID() const {
131 return gaia::CanonicalizeEmail(gaia::SanitizeEmail(email()));
134 std::string User::GetAccountName(bool use_display_email) const {
135 if (use_display_email && !display_email_.empty())
136 return GetUserName(display_email_);
138 return GetUserName(email_);
141 bool User::HasDefaultImage() const {
142 return image_index_ >= 0 && image_index_ < kDefaultImagesCount;
145 bool User::CanSyncImage() const {
149 std::string User::display_email() const {
150 return display_email_;
153 bool User::can_lock() const {
157 std::string User::username_hash() const {
158 return username_hash_;
161 bool User::is_logged_in() const {
162 return is_logged_in_;
165 bool User::is_active() const {
169 User* User::CreateRegularUser(const std::string& email) {
170 return new RegularUser(email);
173 User* User::CreateGuestUser() {
174 return new GuestUser;
177 User* User::CreateKioskAppUser(const std::string& kiosk_app_username) {
178 return new KioskAppUser(kiosk_app_username);
181 User* User::CreateLocallyManagedUser(const std::string& username) {
182 return new LocallyManagedUser(username);
185 User* User::CreateRetailModeUser() {
186 return new RetailModeUser;
189 User* User::CreatePublicAccountUser(const std::string& email) {
190 return new PublicAccountUser(email);
193 User::User(const std::string& 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),
201 is_logged_in_(false),
203 profile_is_created_(false) {
208 void User::SetAccountLocale(const std::string& resolved_account_locale) {
209 account_locale_.reset(new std::string(resolved_account_locale));
212 void User::SetImage(const UserImage& user_image, int image_index) {
213 user_image_ = user_image;
214 image_index_ = image_index;
215 image_is_stub_ = false;
216 image_is_loading_ = false;
217 DCHECK(HasDefaultImage() || user_image.has_raw_image());
220 void User::SetImageURL(const GURL& image_url) {
221 user_image_.set_url(image_url);
224 void User::SetStubImage(int image_index, bool is_loading) {
225 user_image_ = UserImage(
226 *ResourceBundle::GetSharedInstance().
227 GetImageSkiaNamed(IDR_PROFILE_PICTURE_LOADING));
228 image_index_ = image_index;
229 image_is_stub_ = true;
230 image_is_loading_ = is_loading;
233 RegularUser::RegularUser(const std::string& email) : User(email) {
235 set_display_email(email);
238 RegularUser::~RegularUser() {}
240 User::UserType RegularUser::GetType() const {
241 return USER_TYPE_REGULAR;
244 bool RegularUser::CanSyncImage() const {
248 GuestUser::GuestUser() : User(UserManager::kGuestUserName) {
249 set_display_email(std::string());
252 GuestUser::~GuestUser() {}
254 User::UserType GuestUser::GetType() const {
255 return USER_TYPE_GUEST;
258 KioskAppUser::KioskAppUser(const std::string& kiosk_app_username)
259 : User(kiosk_app_username) {
260 set_display_email(kiosk_app_username);
263 KioskAppUser::~KioskAppUser() {}
265 User::UserType KioskAppUser::GetType() const {
266 return USER_TYPE_KIOSK_APP;
269 LocallyManagedUser::LocallyManagedUser(const std::string& username)
274 LocallyManagedUser::~LocallyManagedUser() {}
276 User::UserType LocallyManagedUser::GetType() const {
277 return USER_TYPE_LOCALLY_MANAGED;
280 std::string LocallyManagedUser::display_email() const {
281 return base::UTF16ToUTF8(display_name());
284 RetailModeUser::RetailModeUser() : User(UserManager::kRetailModeUserName) {
285 set_display_email(std::string());
288 RetailModeUser::~RetailModeUser() {}
290 User::UserType RetailModeUser::GetType() const {
291 return USER_TYPE_RETAIL_MODE;
294 PublicAccountUser::PublicAccountUser(const std::string& email) : User(email) {
297 PublicAccountUser::~PublicAccountUser() {}
299 User::UserType PublicAccountUser::GetType() const {
300 return USER_TYPE_PUBLIC_ACCOUNT;
303 bool User::has_gaia_account() const {
304 COMPILE_ASSERT(NUM_USER_TYPES == 6, num_user_types_unexpected);
306 case USER_TYPE_REGULAR:
308 case USER_TYPE_GUEST:
309 case USER_TYPE_RETAIL_MODE:
310 case USER_TYPE_PUBLIC_ACCOUNT:
311 case USER_TYPE_LOCALLY_MANAGED:
312 case USER_TYPE_KIOSK_APP:
320 } // namespace chromeos