Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2013 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 CHROMEOS_LOGIN_LOGIN_STATE_H_
      6 #define CHROMEOS_LOGIN_LOGIN_STATE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/observer_list.h"
     10 #include "chromeos/chromeos_export.h"
     11 
     12 namespace chromeos {
     13 
     14 // Tracks the login state of chrome, accessible to Ash and other chromeos code.
     15 class CHROMEOS_EXPORT LoginState {
     16  public:
     17   enum LoggedInState {
     18     LOGGED_IN_NONE,       // Not logged in
     19     LOGGED_IN_SAFE_MODE,  // Not logged in and login not allowed for non-owners
     20     LOGGED_IN_ACTIVE      // A user has logged in
     21   };
     22 
     23   enum LoggedInUserType {
     24     LOGGED_IN_USER_NONE,             // User is not logged in
     25     LOGGED_IN_USER_REGULAR,          // A regular user is logged in
     26     LOGGED_IN_USER_OWNER,            // The owner of the device is logged in
     27     LOGGED_IN_USER_GUEST,            // A guest is logged in (i.e. incognito)
     28     LOGGED_IN_USER_RETAIL_MODE,      // Is in retail mode
     29     LOGGED_IN_USER_PUBLIC_ACCOUNT,   // A user is logged in to a public session.
     30     LOGGED_IN_USER_SUPERVISED,       // A supervised user is logged in
     31     LOGGED_IN_USER_KIOSK_APP         // Is in kiosk app mode
     32   };
     33 
     34   class Observer {
     35    public:
     36     // Called when either the login state or the logged in user type changes.
     37     virtual void LoggedInStateChanged() = 0;
     38 
     39    protected:
     40     virtual ~Observer() {}
     41   };
     42 
     43   // Manage singleton instance.
     44   static void Initialize();
     45   static void Shutdown();
     46   static LoginState* Get();
     47   static bool IsInitialized();
     48 
     49   // Add/remove observers.
     50   void AddObserver(Observer* observer);
     51   void RemoveObserver(Observer* observer);
     52 
     53   // Sets the logged in state, user type, and primary user hash when the
     54   // primary user initialy logs in. Also notifies observers.
     55   void SetLoggedInStateAndPrimaryUser(
     56       LoggedInState state,
     57       LoggedInUserType type,
     58       const std::string& primary_user_hash);
     59 
     60   // Sets the logged in state and user type. Also notifies observers. Used
     61   // in tests or situations where there is no primary user (e.g. from the
     62   // login screen).
     63   void SetLoggedInState(LoggedInState state, LoggedInUserType type);
     64 
     65   // Gets the logged in user type.
     66   LoggedInUserType GetLoggedInUserType() const;
     67 
     68   // Returns true if a user is considered to be logged in.
     69   bool IsUserLoggedIn() const;
     70 
     71   // Returns true if |logged_in_state_| is safe mode (i.e. the user is not yet
     72   // logged in, and only the owner will be allowed to log in).
     73   bool IsInSafeMode() const;
     74 
     75   // Returns true if logged in to a guest session.
     76   bool IsGuestSessionUser() const;
     77 
     78   // Returns true if logged in to a public session.
     79   bool IsPublicSessionUser() const;
     80 
     81   // Returns true if logged in as a kiosk app.
     82   bool IsKioskApp() const;
     83 
     84   // Whether a network profile is created for the user.
     85   bool UserHasNetworkProfile() const;
     86 
     87   // Returns true if the user is an authenticated user (i.e. the user is not
     88   // using an anonymous session like public or guest session)
     89   bool IsUserAuthenticated() const;
     90 
     91   // Returns true if the user is authenticated by logging into Google account
     92   // (i.e. not using an anonymous nor supervised session).
     93   bool IsUserGaiaAuthenticated() const;
     94 
     95   void set_always_logged_in(bool always_logged_in) {
     96     always_logged_in_ = always_logged_in;
     97   }
     98 
     99   const std::string& primary_user_hash() const { return primary_user_hash_; }
    100 
    101  private:
    102   LoginState();
    103   virtual ~LoginState();
    104 
    105   void NotifyObservers();
    106 
    107   LoggedInState logged_in_state_;
    108   LoggedInUserType logged_in_user_type_;
    109   std::string primary_user_hash_;
    110   ObserverList<Observer> observer_list_;
    111 
    112   // If true, it always thinks the current status as logged in. Set to true by
    113   // default running on a Linux desktop without flags and test cases. To test
    114   // behaviors with a specific login state, call set_always_logged_in(false).
    115   bool always_logged_in_;
    116 
    117   DISALLOW_COPY_AND_ASSIGN(LoginState);
    118 };
    119 
    120 }  // namespace chromeos
    121 
    122 #endif  // CHROMEOS_LOGIN_LOGIN_STATE_H_
    123