// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_ #pragma once #include #include "chrome/browser/chromeos/login/login_status_consumer.h" #include "chrome/common/net/gaia/gaia_auth_consumer.h" #include "chrome/common/net/gaia/gaia_auth_fetcher.h" namespace chromeos { // Tracks the state associated with a single attempt to log in to chromium os. // Enforces that methods are only called on the IO thread. class AuthAttemptState { public: // Used to initalize for a login attempt. AuthAttemptState(const std::string& username, const std::string& password, const std::string& ascii_hash, const std::string& login_token, const std::string& login_captcha, const bool user_is_new); // Used to initalize for a screen unlock attempt. AuthAttemptState(const std::string& username, const std::string& ascii_hash); virtual ~AuthAttemptState(); // Copy |credentials| and |outcome| into this object, so we can have // a copy we're sure to own, and can make available on the IO thread. // Must be called from the IO thread. void RecordOnlineLoginStatus( const GaiaAuthConsumer::ClientLoginResult& credentials, const LoginFailure& outcome); // The next attempt will not allow HOSTED accounts to log in. void DisableHosted(); // Copy |cryptohome_code| and |cryptohome_outcome| into this object, // so we can have a copy we're sure to own, and can make available // on the IO thread. Must be called from the IO thread. void RecordCryptohomeStatus(bool cryptohome_outcome, int cryptohome_code); // Blow away locally stored cryptohome login status. // Must be called from the IO thread. void ResetCryptohomeStatus(); virtual bool online_complete(); virtual const LoginFailure& online_outcome(); virtual const GaiaAuthConsumer::ClientLoginResult& credentials(); virtual bool is_first_time_user(); virtual GaiaAuthFetcher::HostedAccountsSetting hosted_policy(); virtual bool cryptohome_complete(); virtual bool cryptohome_outcome(); virtual int cryptohome_code(); // Saved so we can retry client login, and also so we know for whom login // has succeeded, in the event of successful completion. const std::string username; // These fields are saved so we can retry client login. const std::string password; const std::string ascii_hash; const std::string login_token; const std::string login_captcha; const bool unlock; // True if authenticating to unlock the computer. protected: bool try_again_; // True if we're willing to retry the login attempt. // Status of our online login attempt. bool online_complete_; LoginFailure online_outcome_; GaiaAuthConsumer::ClientLoginResult credentials_; // Whether or not we're accepting HOSTED accounts during the current // online auth attempt. GaiaAuthFetcher::HostedAccountsSetting hosted_policy_; bool is_first_time_user_; // Status of our cryptohome op attempt. Can only have one in flight at a time. bool cryptohome_complete_; bool cryptohome_outcome_; int cryptohome_code_; private: DISALLOW_COPY_AND_ASSIGN(AuthAttemptState); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_