1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
85e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/threading/thread_restrictions.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/user_names.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user_image/default_user_images.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "google_apis/gaia/gaia_auth_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace user_manager {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns account name portion of an email.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetUserName(const std::string& email) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string::size_type i = email.find('@');
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (i == 0 || i == std::string::npos) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return email;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return email.substr(0, i);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool User::IsSupervised() const {
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return false;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid User::SetIsSupervised(bool is_supervised) {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VLOG(1) << "Ignoring SetIsSupervised call with param " << is_supervised;
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RegularUser : public User {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit RegularUser(const std::string& email);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~RegularUser();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual bool CanSyncImage() const OVERRIDE;
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetIsSupervised(bool is_supervised) OVERRIDE {
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    VLOG(1) << "Setting user is supervised to " << is_supervised;
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    is_supervised_ = is_supervised;
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool IsSupervised() const OVERRIDE {
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return is_supervised_;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool is_supervised_;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RegularUser);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GuestUser : public User {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GuestUser();
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~GuestUser();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GuestUser);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class KioskAppUser : public User {
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit KioskAppUser(const std::string& app_id);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~KioskAppUser();
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(KioskAppUser);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUser : public User {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit SupervisedUser(const std::string& username);
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~SupervisedUser();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool IsSupervised() const OVERRIDE;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string display_email() const OVERRIDE;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SupervisedUser);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RetailModeUser : public User {
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RetailModeUser();
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~RetailModeUser();
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RetailModeUser);
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PublicAccountUser : public User {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit PublicAccountUser(const std::string& email);
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~PublicAccountUser();
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from User:
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual UserType GetType() const OVERRIDE;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PublicAccountUser);
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustd::string User::GetEmail() const {
1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return display_email();
1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 User::GetDisplayName() const {
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Fallback to the email account name in case display name haven't been set.
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return display_name_.empty() ? base::UTF8ToUTF16(GetAccountName(true))
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                               : display_name_;
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubase::string16 User::GetGivenName() const {
1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return given_name_;
1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst gfx::ImageSkia& User::GetImage() const {
1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return user_image_.image();
1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustd::string User::GetUserID() const {
1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return gaia::CanonicalizeEmail(gaia::SanitizeEmail(email()));
1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string User::GetAccountName(bool use_display_email) const {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (use_display_email && !display_email_.empty())
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GetUserName(display_email_);
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GetUserName(email_);
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool User::HasDefaultImage() const {
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return image_index_ >= 0 && image_index_ < kDefaultImagesCount;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool User::CanSyncImage() const {
1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return false;
1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string User::display_email() const {
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return display_email_;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool User::can_lock() const {
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return can_lock_;
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string User::username_hash() const {
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return username_hash_;
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool User::is_logged_in() const {
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return is_logged_in_;
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool User::is_active() const {
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return is_active_;
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)User* User::CreateRegularUser(const std::string& email) {
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new RegularUser(email);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)User* User::CreateGuestUser() {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new GuestUser;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)User* User::CreateKioskAppUser(const std::string& kiosk_app_username) {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new KioskAppUser(kiosk_app_username);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)User* User::CreateSupervisedUser(const std::string& username) {
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return new SupervisedUser(username);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)User* User::CreateRetailModeUser() {
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new RetailModeUser;
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)User* User::CreatePublicAccountUser(const std::string& email) {
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new PublicAccountUser(email);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)User::User(const std::string& email)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : email_(email),
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      oauth_token_status_(OAUTH_TOKEN_STATUS_UNKNOWN),
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      force_online_signin_(false),
2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      image_index_(USER_IMAGE_INVALID),
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      image_is_stub_(false),
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      image_is_loading_(false),
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      can_lock_(false),
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      is_logged_in_(false),
21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      is_active_(false),
21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      profile_is_created_(false) {
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)User::~User() {
2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void User::SetAccountLocale(const std::string& resolved_account_locale) {
2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  account_locale_.reset(new std::string(resolved_account_locale));
22268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void User::SetImage(const UserImage& user_image, int image_index) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_image_ = user_image;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_index_ = image_index;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_is_stub_ = false;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_is_loading_ = false;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(HasDefaultImage() || user_image.has_raw_image());
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void User::SetImageURL(const GURL& image_url) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_image_.set_url(image_url);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void User::SetStubImage(const UserImage& stub_user_image,
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        int image_index,
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        bool is_loading) {
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  user_image_ = stub_user_image;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_index_ = image_index;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_is_stub_ = true;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  image_is_loading_ = is_loading;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciRegularUser::RegularUser(const std::string& email)
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : User(email), is_supervised_(false) {
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_can_lock(true);
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_display_email(email);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)RegularUser::~RegularUser() {
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType RegularUser::GetType() const {
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return user_manager::USER_TYPE_REGULAR;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool RegularUser::CanSyncImage() const {
2593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return true;
2603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
2613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
262116680a4aac90f2aa7413d9095a592090648e557Ben MurdochGuestUser::GuestUser() : User(chromeos::login::kGuestUserName) {
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_display_email(std::string());
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GuestUser::~GuestUser() {
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType GuestUser::GetType() const {
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return user_manager::USER_TYPE_GUEST;
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)KioskAppUser::KioskAppUser(const std::string& kiosk_app_username)
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : User(kiosk_app_username) {
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_display_email(kiosk_app_username);
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)KioskAppUser::~KioskAppUser() {
2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType KioskAppUser::GetType() const {
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return user_manager::USER_TYPE_KIOSK_APP;
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUser::SupervisedUser(const std::string& username) : User(username) {
2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_can_lock(true);
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUser::~SupervisedUser() {
2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType SupervisedUser::GetType() const {
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return user_manager::USER_TYPE_SUPERVISED;
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string SupervisedUser::display_email() const {
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF16ToUTF8(display_name());
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool SupervisedUser::IsSupervised() const {
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return true;
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
304116680a4aac90f2aa7413d9095a592090648e557Ben MurdochRetailModeUser::RetailModeUser() : User(chromeos::login::kRetailModeUserName) {
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_display_email(std::string());
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)RetailModeUser::~RetailModeUser() {
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType RetailModeUser::GetType() const {
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return user_manager::USER_TYPE_RETAIL_MODE;
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PublicAccountUser::PublicAccountUser(const std::string& email) : User(email) {
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PublicAccountUser::~PublicAccountUser() {
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)UserType PublicAccountUser::GetType() const {
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return user_manager::USER_TYPE_PUBLIC_ACCOUNT;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool User::has_gaia_account() const {
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  COMPILE_ASSERT(user_manager::NUM_USER_TYPES == 6, num_user_types_unexpected);
32768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  switch (GetType()) {
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case user_manager::USER_TYPE_REGULAR:
32968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return true;
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case user_manager::USER_TYPE_GUEST:
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case user_manager::USER_TYPE_RETAIL_MODE:
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case user_manager::USER_TYPE_PUBLIC_ACCOUNT:
3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case user_manager::USER_TYPE_SUPERVISED:
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    case user_manager::USER_TYPE_KIOSK_APP:
33568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return false;
33668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    default:
33768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      NOTREACHED();
33868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
33968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return false;
34068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
34168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace user_manager
343