// Copyright (c) 2011 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_MOCK_AUTHENTICATOR_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_AUTHENTICATOR_H_ #pragma once #include <string> #include "chrome/browser/chromeos/login/authenticator.h" #include "chrome/browser/chromeos/login/background_view.h" #include "chrome/browser/chromeos/login/login_utils.h" #include "chrome/common/net/gaia/google_service_auth_error.h" #include "content/browser/browser_thread.h" #include "testing/gtest/include/gtest/gtest.h" class Profile; namespace chromeos { class LoginStatusConsumer; class MockAuthenticator : public Authenticator { public: MockAuthenticator(LoginStatusConsumer* consumer, const std::string& expected_username, const std::string& expected_password) : Authenticator(consumer), expected_username_(expected_username), expected_password_(expected_password) { } // Returns true after posting task to UI thread to call OnLoginSuccess(). // This is called on the FILE thread now, so we need to do this. virtual bool AuthenticateToLogin(Profile* profile, const std::string& username, const std::string& password, const std::string& login_token, const std::string& login_captcha) { if (expected_username_ == username && expected_password_ == password) { BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, NewRunnableMethod(this, &MockAuthenticator::OnLoginSuccess, GaiaAuthConsumer::ClientLoginResult(), false)); return true; } GoogleServiceAuthError error( GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, NewRunnableMethod(this, &MockAuthenticator::OnLoginFailure, LoginFailure::FromNetworkAuthFailure(error))); return false; } virtual bool AuthenticateToUnlock(const std::string& username, const std::string& password) { return AuthenticateToLogin(NULL /* not used */, username, password, std::string(), std::string()); } virtual void LoginOffTheRecord() { consumer_->OnOffTheRecordLoginSuccess(); } void OnLoginSuccess(const GaiaAuthConsumer::ClientLoginResult& credentials, bool request_pending) { // If we want to be more like the real thing, we could save username // in AuthenticateToLogin, but there's not much of a point. consumer_->OnLoginSuccess(expected_username_, expected_password_, credentials, request_pending); } void OnLoginFailure(const LoginFailure& failure) { consumer_->OnLoginFailure(failure); VLOG(1) << "Posting a QuitTask to UI thread"; BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, new MessageLoop::QuitTask); } virtual void RecoverEncryptedData( const std::string& old_password, const GaiaAuthConsumer::ClientLoginResult& credentials) {} virtual void ResyncEncryptedData( const GaiaAuthConsumer::ClientLoginResult& credentials) {} virtual void RetryAuth(Profile* profile, const std::string& username, const std::string& password, const std::string& login_token, const std::string& login_captcha) {} private: std::string expected_username_; std::string expected_password_; DISALLOW_COPY_AND_ASSIGN(MockAuthenticator); }; class MockLoginUtils : public LoginUtils { public: explicit MockLoginUtils(const std::string& expected_username, const std::string& expected_password) : expected_username_(expected_username), expected_password_(expected_password) { } virtual bool ShouldWaitForWifi() { return false; } virtual void PrepareProfile(const std::string& username, const std::string& password, const GaiaAuthConsumer::ClientLoginResult& res, bool pending_requests, Delegate* delegate) { EXPECT_EQ(expected_username_, username); EXPECT_EQ(expected_password_, password); // Profile hasn't been loaded. delegate->OnProfilePrepared(NULL); } virtual void CompleteOffTheRecordLogin(const GURL& start_url) { } virtual void SetFirstLoginPrefs(PrefService* prefs) { } virtual Authenticator* CreateAuthenticator(LoginStatusConsumer* consumer) { return new MockAuthenticator( consumer, expected_username_, expected_password_); } virtual void PrewarmAuthentication() { } virtual void FetchCookies( Profile* profile, const GaiaAuthConsumer::ClientLoginResult& credentials) { } virtual void FetchTokens( Profile* profile, const GaiaAuthConsumer::ClientLoginResult& credentials) { } void SetBackgroundView(BackgroundView* background_view) { background_view_ = background_view; } BackgroundView* GetBackgroundView() { return background_view_; } virtual std::string GetOffTheRecordCommandLine( const GURL& start_url, const CommandLine& base_command_line, CommandLine* command_line) { return std::string(); } private: std::string expected_username_; std::string expected_password_; std::string auth_token_; chromeos::BackgroundView* background_view_; DISALLOW_COPY_AND_ASSIGN(MockLoginUtils); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MOCK_AUTHENTICATOR_H_