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