• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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