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