1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/login/login_status_consumer.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/net/gaia/gaia_auth_consumer.h" 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/common/net/gaia/gaia_auth_fetcher.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos { 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Tracks the state associated with a single attempt to log in to chromium os. 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Enforces that methods are only called on the IO thread. 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass AuthAttemptState { 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Used to initalize for a login attempt. 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AuthAttemptState(const std::string& username, 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& password, 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& ascii_hash, 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& login_token, 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::string& login_captcha, 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const bool user_is_new); 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Used to initalize for a screen unlock attempt. 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AuthAttemptState(const std::string& username, const std::string& ascii_hash); 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~AuthAttemptState(); 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Copy |credentials| and |outcome| into this object, so we can have 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // a copy we're sure to own, and can make available on the IO thread. 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Must be called from the IO thread. 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void RecordOnlineLoginStatus( 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const GaiaAuthConsumer::ClientLoginResult& credentials, 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const LoginFailure& outcome); 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The next attempt will not allow HOSTED accounts to log in. 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void DisableHosted(); 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Copy |cryptohome_code| and |cryptohome_outcome| into this object, 46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // so we can have a copy we're sure to own, and can make available 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // on the IO thread. Must be called from the IO thread. 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void RecordCryptohomeStatus(bool cryptohome_outcome, int cryptohome_code); 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Blow away locally stored cryptohome login status. 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Must be called from the IO thread. 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void ResetCryptohomeStatus(); 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool online_complete(); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual const LoginFailure& online_outcome(); 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual const GaiaAuthConsumer::ClientLoginResult& credentials(); 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool is_first_time_user(); 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual GaiaAuthFetcher::HostedAccountsSetting hosted_policy(); 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool cryptohome_complete(); 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool cryptohome_outcome(); 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual int cryptohome_code(); 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Saved so we can retry client login, and also so we know for whom login 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // has succeeded, in the event of successful completion. 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string username; 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // These fields are saved so we can retry client login. 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string password; 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string ascii_hash; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string login_token; 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string login_captcha; 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const bool unlock; // True if authenticating to unlock the computer. 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool try_again_; // True if we're willing to retry the login attempt. 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Status of our online login attempt. 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool online_complete_; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LoginFailure online_outcome_; 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GaiaAuthConsumer::ClientLoginResult credentials_; 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Whether or not we're accepting HOSTED accounts during the current 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // online auth attempt. 864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch GaiaAuthFetcher::HostedAccountsSetting hosted_policy_; 874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool is_first_time_user_; 884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Status of our cryptohome op attempt. Can only have one in flight at a time. 90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool cryptohome_complete_; 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool cryptohome_outcome_; 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int cryptohome_code_; 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(AuthAttemptState); 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace chromeos 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_CHROMEOS_LOGIN_AUTH_ATTEMPT_STATE_H_ 101