1 // Copyright (c) 2011 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_MOCK_AUTHENTICATOR_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_AUTHENTICATOR_H_ 7 #pragma once 8 9 #include <string> 10 11 #include "chrome/browser/chromeos/login/authenticator.h" 12 #include "chrome/browser/chromeos/login/background_view.h" 13 #include "chrome/browser/chromeos/login/login_utils.h" 14 #include "chrome/common/net/gaia/google_service_auth_error.h" 15 #include "content/browser/browser_thread.h" 16 #include "testing/gtest/include/gtest/gtest.h" 17 18 class Profile; 19 20 namespace chromeos { 21 22 class LoginStatusConsumer; 23 24 class MockAuthenticator : public Authenticator { 25 public: MockAuthenticator(LoginStatusConsumer * consumer,const std::string & expected_username,const std::string & expected_password)26 MockAuthenticator(LoginStatusConsumer* consumer, 27 const std::string& expected_username, 28 const std::string& expected_password) 29 : Authenticator(consumer), 30 expected_username_(expected_username), 31 expected_password_(expected_password) { 32 } 33 34 // Returns true after posting task to UI thread to call OnLoginSuccess(). 35 // This is called on the FILE thread now, so we need to do this. AuthenticateToLogin(Profile * profile,const std::string & username,const std::string & password,const std::string & login_token,const std::string & login_captcha)36 virtual bool AuthenticateToLogin(Profile* profile, 37 const std::string& username, 38 const std::string& password, 39 const std::string& login_token, 40 const std::string& login_captcha) { 41 if (expected_username_ == username && expected_password_ == password) { 42 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 43 NewRunnableMethod(this, &MockAuthenticator::OnLoginSuccess, 44 GaiaAuthConsumer::ClientLoginResult(), false)); 45 return true; 46 } 47 GoogleServiceAuthError error( 48 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 49 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 50 NewRunnableMethod(this, &MockAuthenticator::OnLoginFailure, 51 LoginFailure::FromNetworkAuthFailure(error))); 52 return false; 53 } 54 AuthenticateToUnlock(const std::string & username,const std::string & password)55 virtual bool AuthenticateToUnlock(const std::string& username, 56 const std::string& password) { 57 return AuthenticateToLogin(NULL /* not used */, username, password, 58 std::string(), std::string()); 59 } 60 LoginOffTheRecord()61 virtual void LoginOffTheRecord() { 62 consumer_->OnOffTheRecordLoginSuccess(); 63 } 64 OnLoginSuccess(const GaiaAuthConsumer::ClientLoginResult & credentials,bool request_pending)65 void OnLoginSuccess(const GaiaAuthConsumer::ClientLoginResult& credentials, 66 bool request_pending) { 67 // If we want to be more like the real thing, we could save username 68 // in AuthenticateToLogin, but there's not much of a point. 69 consumer_->OnLoginSuccess(expected_username_, 70 expected_password_, 71 credentials, 72 request_pending); 73 } 74 OnLoginFailure(const LoginFailure & failure)75 void OnLoginFailure(const LoginFailure& failure) { 76 consumer_->OnLoginFailure(failure); 77 VLOG(1) << "Posting a QuitTask to UI thread"; 78 BrowserThread::PostTask( 79 BrowserThread::UI, FROM_HERE, new MessageLoop::QuitTask); 80 } 81 RecoverEncryptedData(const std::string & old_password,const GaiaAuthConsumer::ClientLoginResult & credentials)82 virtual void RecoverEncryptedData( 83 const std::string& old_password, 84 const GaiaAuthConsumer::ClientLoginResult& credentials) {} 85 ResyncEncryptedData(const GaiaAuthConsumer::ClientLoginResult & credentials)86 virtual void ResyncEncryptedData( 87 const GaiaAuthConsumer::ClientLoginResult& credentials) {} 88 RetryAuth(Profile * profile,const std::string & username,const std::string & password,const std::string & login_token,const std::string & login_captcha)89 virtual void RetryAuth(Profile* profile, 90 const std::string& username, 91 const std::string& password, 92 const std::string& login_token, 93 const std::string& login_captcha) {} 94 95 private: 96 std::string expected_username_; 97 std::string expected_password_; 98 99 DISALLOW_COPY_AND_ASSIGN(MockAuthenticator); 100 }; 101 102 class MockLoginUtils : public LoginUtils { 103 public: MockLoginUtils(const std::string & expected_username,const std::string & expected_password)104 explicit MockLoginUtils(const std::string& expected_username, 105 const std::string& expected_password) 106 : expected_username_(expected_username), 107 expected_password_(expected_password) { 108 } 109 ShouldWaitForWifi()110 virtual bool ShouldWaitForWifi() { 111 return false; 112 } 113 PrepareProfile(const std::string & username,const std::string & password,const GaiaAuthConsumer::ClientLoginResult & res,bool pending_requests,Delegate * delegate)114 virtual void PrepareProfile(const std::string& username, 115 const std::string& password, 116 const GaiaAuthConsumer::ClientLoginResult& res, 117 bool pending_requests, 118 Delegate* delegate) { 119 EXPECT_EQ(expected_username_, username); 120 EXPECT_EQ(expected_password_, password); 121 // Profile hasn't been loaded. 122 delegate->OnProfilePrepared(NULL); 123 } 124 CompleteOffTheRecordLogin(const GURL & start_url)125 virtual void CompleteOffTheRecordLogin(const GURL& start_url) { 126 } 127 SetFirstLoginPrefs(PrefService * prefs)128 virtual void SetFirstLoginPrefs(PrefService* prefs) { 129 } 130 CreateAuthenticator(LoginStatusConsumer * consumer)131 virtual Authenticator* CreateAuthenticator(LoginStatusConsumer* consumer) { 132 return new MockAuthenticator( 133 consumer, expected_username_, expected_password_); 134 } 135 PrewarmAuthentication()136 virtual void PrewarmAuthentication() { 137 } 138 FetchCookies(Profile * profile,const GaiaAuthConsumer::ClientLoginResult & credentials)139 virtual void FetchCookies( 140 Profile* profile, 141 const GaiaAuthConsumer::ClientLoginResult& credentials) { 142 } 143 FetchTokens(Profile * profile,const GaiaAuthConsumer::ClientLoginResult & credentials)144 virtual void FetchTokens( 145 Profile* profile, 146 const GaiaAuthConsumer::ClientLoginResult& credentials) { 147 } 148 SetBackgroundView(BackgroundView * background_view)149 void SetBackgroundView(BackgroundView* background_view) { 150 background_view_ = background_view; 151 } 152 GetBackgroundView()153 BackgroundView* GetBackgroundView() { 154 return background_view_; 155 } 156 GetOffTheRecordCommandLine(const GURL & start_url,const CommandLine & base_command_line,CommandLine * command_line)157 virtual std::string GetOffTheRecordCommandLine( 158 const GURL& start_url, 159 const CommandLine& base_command_line, 160 CommandLine* command_line) { 161 return std::string(); 162 } 163 164 private: 165 std::string expected_username_; 166 std::string expected_password_; 167 std::string auth_token_; 168 chromeos::BackgroundView* background_view_; 169 170 DISALLOW_COPY_AND_ASSIGN(MockLoginUtils); 171 }; 172 173 } // namespace chromeos 174 175 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_AUTHENTICATOR_H_ 176