Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_
      6 #define CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_
      7 
      8 #include <string>
      9 
     10 #include "chrome/browser/chromeos/login/login_status_consumer.h"
     11 #include "chrome/browser/chromeos/login/user.h"
     12 #include "google_apis/gaia/gaia_auth_consumer.h"
     13 #include "google_apis/gaia/gaia_auth_fetcher.h"
     14 #include "third_party/cros_system_api/dbus/service_constants.h"
     15 
     16 namespace chromeos {
     17 
     18 // Tracks the state associated with a single attempt to log in to chromium os.
     19 // Enforces that methods are only called on the UI thread.
     20 
     21 class AuthAttemptState {
     22  public:
     23   // Used to initialize for a login attempt.
     24   AuthAttemptState(const UserContext& user_context,
     25                    const std::string& login_token,
     26                    const std::string& login_captcha,
     27                    const User::UserType user_type,
     28                    const bool user_is_new);
     29 
     30   // Used to initialize for a externally authenticated login.
     31   AuthAttemptState(const UserContext& user_context,
     32                    const bool user_is_new);
     33 
     34   // Used to initialize for a screen unlock attempt.
     35   AuthAttemptState(const std::string& username, const std::string& password);
     36 
     37   virtual ~AuthAttemptState();
     38 
     39   // Copy |user_context| and copy |outcome| into this object, so we can have
     40   // a copy we're sure to own, and can make available on the UI thread.
     41   // Must be called from the UI thread.
     42   void RecordOnlineLoginStatus(
     43       const LoginFailure& outcome);
     44 
     45   // Copy |username_hash| into this object, so we can have
     46   // a copy we're sure to own, and can make available on the UI thread.
     47   // Must be called from the UI thread.
     48   void RecordUsernameHash(const std::string& username_hash);
     49 
     50   // Marks that the username hash request attempt has failed.
     51   void RecordUsernameHashFailed();
     52 
     53   // Marks username hash as being requested so that flow will block till both
     54   // requests (Mount/GetUsernameHash) are completed.
     55   void UsernameHashRequested();
     56 
     57   // The next attempt will not allow HOSTED accounts to log in.
     58   void DisableHosted();
     59 
     60   // Copy |cryptohome_code| and |cryptohome_outcome| into this object,
     61   // so we can have a copy we're sure to own, and can make available
     62   // on the UI thread.  Must be called from the UI thread.
     63   void RecordCryptohomeStatus(bool cryptohome_outcome,
     64                               cryptohome::MountError cryptohome_code);
     65 
     66   // Blow away locally stored cryptohome login status.
     67   // Must be called from the UI thread.
     68   void ResetCryptohomeStatus();
     69 
     70   virtual bool online_complete();
     71   virtual const LoginFailure& online_outcome();
     72   virtual bool is_first_time_user();
     73   virtual GaiaAuthFetcher::HostedAccountsSetting hosted_policy();
     74 
     75   virtual bool cryptohome_complete();
     76   virtual bool cryptohome_outcome();
     77   virtual cryptohome::MountError cryptohome_code();
     78 
     79   virtual bool username_hash_obtained();
     80   virtual bool username_hash_valid();
     81 
     82   // Saved so we can retry client login, and also so we know for whom login
     83   // has succeeded, in the event of successful completion.
     84   UserContext user_context;
     85 
     86   // These fields are saved so we can retry client login.
     87   const std::string login_token;
     88   const std::string login_captcha;
     89 
     90   // The type of the user attempting to log in.
     91   const User::UserType user_type;
     92 
     93   const bool unlock;  // True if authenticating to unlock the computer.
     94 
     95  protected:
     96   // Status of our online login attempt.
     97   bool online_complete_;
     98   LoginFailure online_outcome_;
     99 
    100   // Whether or not we're accepting HOSTED accounts during the current
    101   // online auth attempt.
    102   GaiaAuthFetcher::HostedAccountsSetting hosted_policy_;
    103   bool is_first_time_user_;
    104 
    105   // Status of our cryptohome op attempt. Can only have one in flight at a time.
    106   bool cryptohome_complete_;
    107   bool cryptohome_outcome_;
    108   cryptohome::MountError cryptohome_code_;
    109 
    110  private:
    111   // Status of the crypthome GetSanitizedUsername() async call.
    112   // This gets initialized as being completed and those callers
    113   // that would explicitly request username hash would have to reset this.
    114   bool username_hash_obtained_;
    115 
    116   // After the username hash request is completed, this marks whether
    117   // the request was successful.
    118   bool username_hash_valid_;
    119 
    120   DISALLOW_COPY_AND_ASSIGN(AuthAttemptState);
    121 };
    122 
    123 }  // namespace chromeos
    124 
    125 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_
    126