Home | History | Annotate | Download | only in user_manager
      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 #ifndef COMPONENTS_USER_MANAGER_USER_H_
      6 #define COMPONENTS_USER_MANAGER_USER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/strings/string16.h"
     13 #include "components/user_manager/user_image/user_image.h"
     14 #include "components/user_manager/user_info.h"
     15 #include "components/user_manager/user_manager_export.h"
     16 #include "components/user_manager/user_type.h"
     17 #include "third_party/skia/include/core/SkBitmap.h"
     18 #include "ui/gfx/image/image_skia.h"
     19 
     20 namespace chromeos {
     21 class ChromeUserManagerImpl;
     22 class FakeLoginUtils;
     23 class FakeUserManager;
     24 class MockUserManager;
     25 class SupervisedUserManagerImpl;
     26 class UserAddingScreenTest;
     27 class UserImageManagerImpl;
     28 class UserSessionManager;
     29 }
     30 
     31 namespace user_manager {
     32 
     33 class UserManagerBase;
     34 
     35 // A class representing information about a previously logged in user.
     36 // Each user has a canonical email (username), returned by |email()| and
     37 // may have a different displayed email (in the raw form as entered by user),
     38 // returned by |displayed_email()|.
     39 // Displayed emails are for use in UI only, anywhere else users must be referred
     40 // to by |email()|.
     41 class USER_MANAGER_EXPORT User : public UserInfo {
     42  public:
     43   // User OAuth token status according to the last check.
     44   // Please note that enum values 1 and 2 were used for OAuth1 status and are
     45   // deprecated now.
     46   typedef enum {
     47     OAUTH_TOKEN_STATUS_UNKNOWN = 0,
     48     OAUTH2_TOKEN_STATUS_INVALID = 3,
     49     OAUTH2_TOKEN_STATUS_VALID = 4,
     50   } OAuthTokenStatus;
     51 
     52   // These special values are used instead of actual default image indices.
     53   typedef enum {
     54     USER_IMAGE_INVALID = -3,
     55 
     56     // Returned as |image_index| when user profile image is used as user image.
     57     USER_IMAGE_PROFILE = -2,
     58 
     59     // Returned as |image_index| when user-selected file or photo is used as
     60     // user image.
     61     USER_IMAGE_EXTERNAL = -1,
     62   } UserImageType;
     63 
     64   // This enum is used to define the buckets for an enumerated UMA histogram.
     65   // Hence,
     66   //   (a) existing enumerated constants should never be deleted or reordered,
     67   //   (b) new constants should only be appended at the end of the enumeration.
     68   enum WallpaperType {
     69     /* DAILY = 0 */    // Removed.
     70     CUSTOMIZED = 1,    // Selected by user.
     71     DEFAULT = 2,       // Default.
     72     /* UNKNOWN = 3 */  // Removed.
     73     ONLINE = 4,        // WallpaperInfo.location denotes an URL.
     74     POLICY = 5,        // Controlled by policy, can't be changed by the user.
     75     WALLPAPER_TYPE_COUNT = 6
     76   };
     77 
     78   // Returns the user type.
     79   virtual UserType GetType() const = 0;
     80 
     81   // The email the user used to log in.
     82   const std::string& email() const { return email_; }
     83 
     84   // The displayed user name.
     85   base::string16 display_name() const { return display_name_; }
     86 
     87   // UserInfo
     88   virtual std::string GetEmail() const OVERRIDE;
     89   virtual base::string16 GetDisplayName() const OVERRIDE;
     90   virtual base::string16 GetGivenName() const OVERRIDE;
     91   virtual const gfx::ImageSkia& GetImage() const OVERRIDE;
     92   virtual std::string GetUserID() const OVERRIDE;
     93 
     94   // Is user supervised.
     95   virtual bool IsSupervised() const;
     96   virtual void SetIsSupervised(bool is_supervised);
     97 
     98   // Returns the account name part of the email. Use the display form of the
     99   // email if available and use_display_name == true. Otherwise use canonical.
    100   std::string GetAccountName(bool use_display_email) const;
    101 
    102   // Whether the user has a default image.
    103   bool HasDefaultImage() const;
    104 
    105   // True if user image can be synced.
    106   virtual bool CanSyncImage() const;
    107 
    108   int image_index() const { return image_index_; }
    109   bool has_raw_image() const { return user_image_.has_raw_image(); }
    110   // Returns raw representation of static user image.
    111   const UserImage::RawImage& raw_image() const {
    112     return user_image_.raw_image();
    113   }
    114 
    115   // Whether |raw_image| contains data in format that is considered safe to
    116   // decode in sensitive environment (on Login screen).
    117   bool image_is_safe_format() const { return user_image_.is_safe_format(); }
    118 
    119   // Returns the URL of user image, if there is any. Currently only the profile
    120   // image has a URL, for other images empty URL is returned.
    121   GURL image_url() const { return user_image_.url(); }
    122 
    123   // True if user image is a stub (while real image is being loaded from file).
    124   bool image_is_stub() const { return image_is_stub_; }
    125 
    126   // True if image is being loaded from file.
    127   bool image_is_loading() const { return image_is_loading_; }
    128 
    129   // The displayed (non-canonical) user email.
    130   virtual std::string display_email() const;
    131 
    132   // OAuth token status for this user.
    133   OAuthTokenStatus oauth_token_status() const { return oauth_token_status_; }
    134 
    135   // Whether online authentication against GAIA should be enforced during the
    136   // user's next sign-in.
    137   bool force_online_signin() const { return force_online_signin_; }
    138 
    139   // True if the user's session can be locked (i.e. the user has a password with
    140   // which to unlock the session).
    141   bool can_lock() const;
    142 
    143   // Returns empty string when home dir hasn't been mounted yet.
    144   std::string username_hash() const;
    145 
    146   // True if current user is logged in.
    147   bool is_logged_in() const;
    148 
    149   // True if current user is active within the current session.
    150   bool is_active() const;
    151 
    152   // True if the user Profile is created.
    153   bool is_profile_created() const { return profile_is_created_; }
    154 
    155  protected:
    156   friend class UserManagerBase;
    157   friend class chromeos::ChromeUserManagerImpl;
    158   friend class chromeos::SupervisedUserManagerImpl;
    159   friend class chromeos::UserImageManagerImpl;
    160   friend class chromeos::UserSessionManager;
    161 
    162   // For testing:
    163   friend class chromeos::MockUserManager;
    164   friend class chromeos::FakeLoginUtils;
    165   friend class chromeos::FakeUserManager;
    166   friend class chromeos::UserAddingScreenTest;
    167 
    168   // Do not allow anyone else to create new User instances.
    169   static User* CreateRegularUser(const std::string& email);
    170   static User* CreateGuestUser();
    171   static User* CreateKioskAppUser(const std::string& kiosk_app_username);
    172   static User* CreateSupervisedUser(const std::string& username);
    173   static User* CreateRetailModeUser();
    174   static User* CreatePublicAccountUser(const std::string& email);
    175 
    176   explicit User(const std::string& email);
    177   virtual ~User();
    178 
    179   const std::string* GetAccountLocale() const { return account_locale_.get(); }
    180 
    181   // Setters are private so only UserManager can call them.
    182   void SetAccountLocale(const std::string& resolved_account_locale);
    183 
    184   void SetImage(const UserImage& user_image, int image_index);
    185 
    186   void SetImageURL(const GURL& image_url);
    187 
    188   // Sets a stub image until the next |SetImage| call. |image_index| may be
    189   // one of |USER_IMAGE_EXTERNAL| or |USER_IMAGE_PROFILE|.
    190   // If |is_loading| is |true|, that means user image is being loaded from file.
    191   void SetStubImage(const UserImage& stub_user_image,
    192                     int image_index,
    193                     bool is_loading);
    194 
    195   void set_display_name(const base::string16& display_name) {
    196     display_name_ = display_name;
    197   }
    198 
    199   void set_given_name(const base::string16& given_name) {
    200     given_name_ = given_name;
    201   }
    202 
    203   void set_display_email(const std::string& display_email) {
    204     display_email_ = display_email;
    205   }
    206 
    207   const UserImage& user_image() const { return user_image_; }
    208 
    209   void set_oauth_token_status(OAuthTokenStatus status) {
    210     oauth_token_status_ = status;
    211   }
    212 
    213   void set_force_online_signin(bool force_online_signin) {
    214     force_online_signin_ = force_online_signin;
    215   }
    216 
    217   void set_username_hash(const std::string& username_hash) {
    218     username_hash_ = username_hash;
    219   }
    220 
    221   void set_is_logged_in(bool is_logged_in) { is_logged_in_ = is_logged_in; }
    222 
    223   void set_can_lock(bool can_lock) { can_lock_ = can_lock; }
    224 
    225   void set_is_active(bool is_active) { is_active_ = is_active; }
    226 
    227   void set_profile_is_created() { profile_is_created_ = true; }
    228 
    229   // True if user has google account (not a guest or managed user).
    230   bool has_gaia_account() const;
    231 
    232  private:
    233   std::string email_;
    234   base::string16 display_name_;
    235   base::string16 given_name_;
    236   // The displayed user email, defaults to |email_|.
    237   std::string display_email_;
    238   UserImage user_image_;
    239   OAuthTokenStatus oauth_token_status_;
    240   bool force_online_signin_;
    241 
    242   // This is set to chromeos locale if account data has been downloaded.
    243   // (Or failed to download, but at least one download attempt finished).
    244   // An empty string indicates error in data load, or in
    245   // translation of Account locale to chromeos locale.
    246   scoped_ptr<std::string> account_locale_;
    247 
    248   // Used to identify homedir mount point.
    249   std::string username_hash_;
    250 
    251   // Either index of a default image for the user, |USER_IMAGE_EXTERNAL| or
    252   // |USER_IMAGE_PROFILE|.
    253   int image_index_;
    254 
    255   // True if current user image is a stub set by a |SetStubImage| call.
    256   bool image_is_stub_;
    257 
    258   // True if current user image is being loaded from file.
    259   bool image_is_loading_;
    260 
    261   // True if user is able to lock screen.
    262   bool can_lock_;
    263 
    264   // True if user is currently logged in in current session.
    265   bool is_logged_in_;
    266 
    267   // True if user is currently logged in and active in current session.
    268   bool is_active_;
    269 
    270   // True if user Profile is created
    271   bool profile_is_created_;
    272 
    273   DISALLOW_COPY_AND_ASSIGN(User);
    274 };
    275 
    276 // List of known users.
    277 typedef std::vector<User*> UserList;
    278 
    279 }  // namespace user_manager
    280 
    281 #endif  // COMPONENTS_USER_MANAGER_USER_H_
    282