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 |