1 // Copyright 2014 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 #include "chrome/browser/chromeos/login/auth/auth_attempt_state.h" 6 7 #include <string> 8 9 #include "content/public/browser/browser_thread.h" 10 #include "google_apis/gaia/gaia_auth_consumer.h" 11 #include "google_apis/gaia/gaia_auth_fetcher.h" 12 13 using content::BrowserThread; 14 15 namespace chromeos { 16 17 AuthAttemptState::AuthAttemptState(const UserContext& user_context, 18 User::UserType user_type, 19 bool unlock, 20 bool online_complete, 21 bool user_is_new) 22 : user_context(user_context), 23 user_type(user_type), 24 unlock(unlock), 25 online_complete_(online_complete), 26 online_outcome_(online_complete ? LoginFailure::UNLOCK_FAILED : 27 LoginFailure::NONE), 28 hosted_policy_(GaiaAuthFetcher::HostedAccountsAllowed), 29 is_first_time_user_(user_is_new), 30 cryptohome_complete_(false), 31 cryptohome_outcome_(false), 32 cryptohome_code_(cryptohome::MOUNT_ERROR_NONE), 33 username_hash_obtained_(true), 34 username_hash_valid_(true) { 35 } 36 37 AuthAttemptState::~AuthAttemptState() {} 38 39 void AuthAttemptState::RecordOnlineLoginStatus( 40 const LoginFailure& outcome) { 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 42 online_complete_ = true; 43 online_outcome_ = outcome; 44 // We're either going to not try again, or try again with HOSTED 45 // accounts not allowed, so just set this here. 46 DisableHosted(); 47 } 48 49 void AuthAttemptState::DisableHosted() { 50 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 51 hosted_policy_ = GaiaAuthFetcher::HostedAccountsNotAllowed; 52 } 53 54 void AuthAttemptState::RecordCryptohomeStatus( 55 bool cryptohome_outcome, 56 cryptohome::MountError cryptohome_code) { 57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 58 cryptohome_complete_ = true; 59 cryptohome_outcome_ = cryptohome_outcome; 60 cryptohome_code_ = cryptohome_code; 61 } 62 63 void AuthAttemptState::RecordUsernameHash(const std::string& username_hash) { 64 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 65 user_context.SetUserIDHash(username_hash); 66 username_hash_obtained_ = true; 67 username_hash_valid_ = true; 68 } 69 70 void AuthAttemptState::RecordUsernameHashFailed() { 71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 72 username_hash_obtained_ = true; 73 username_hash_valid_ = false; 74 } 75 76 void AuthAttemptState::UsernameHashRequested() { 77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 78 username_hash_obtained_ = false; 79 } 80 81 void AuthAttemptState::ResetCryptohomeStatus() { 82 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 83 cryptohome_complete_ = false; 84 cryptohome_outcome_ = false; 85 cryptohome_code_ = cryptohome::MOUNT_ERROR_NONE; 86 } 87 88 bool AuthAttemptState::online_complete() { 89 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 90 return online_complete_; 91 } 92 93 const LoginFailure& AuthAttemptState::online_outcome() { 94 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 95 return online_outcome_; 96 } 97 98 bool AuthAttemptState::is_first_time_user() { 99 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 100 return is_first_time_user_; 101 } 102 103 GaiaAuthFetcher::HostedAccountsSetting AuthAttemptState::hosted_policy() { 104 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 105 return hosted_policy_; 106 } 107 108 bool AuthAttemptState::cryptohome_complete() { 109 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 110 return cryptohome_complete_; 111 } 112 113 bool AuthAttemptState::cryptohome_outcome() { 114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 115 return cryptohome_outcome_; 116 } 117 118 cryptohome::MountError AuthAttemptState::cryptohome_code() { 119 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 120 return cryptohome_code_; 121 } 122 123 bool AuthAttemptState::username_hash_obtained() { 124 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 125 return username_hash_obtained_; 126 } 127 128 bool AuthAttemptState::username_hash_valid() { 129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 130 return username_hash_obtained_; 131 } 132 133 } // namespace chromeos 134