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 "chromeos/login/auth/mock_authenticator.h"
6
7#include "base/bind.h"
8#include "base/location.h"
9#include "base/logging.h"
10
11namespace chromeos {
12
13MockAuthenticator::MockAuthenticator(AuthStatusConsumer* consumer,
14                                     const UserContext& expected_user_context)
15    : Authenticator(consumer),
16      expected_user_context_(expected_user_context),
17      message_loop_(base::MessageLoopProxy::current()) {
18}
19
20void MockAuthenticator::CompleteLogin(Profile* profile,
21                                      const UserContext& user_context) {
22  if (expected_user_context_ != user_context)
23    NOTREACHED();
24  OnAuthSuccess();
25}
26
27void MockAuthenticator::AuthenticateToLogin(Profile* profile,
28                                            const UserContext& user_context) {
29  if (user_context == expected_user_context_) {
30    message_loop_->PostTask(
31        FROM_HERE, base::Bind(&MockAuthenticator::OnAuthSuccess, this));
32    return;
33  }
34  GoogleServiceAuthError error(
35      GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
36  message_loop_->PostTask(
37      FROM_HERE,
38      base::Bind(&MockAuthenticator::OnAuthFailure,
39                 this,
40                 AuthFailure::FromNetworkAuthFailure(error)));
41}
42
43void MockAuthenticator::AuthenticateToUnlock(const UserContext& user_context) {
44  AuthenticateToLogin(NULL /* not used */, user_context);
45}
46
47void MockAuthenticator::LoginAsSupervisedUser(const UserContext& user_context) {
48  UserContext new_user_context = user_context;
49  new_user_context.SetUserIDHash(user_context.GetUserID());
50  consumer_->OnAuthSuccess(new_user_context);
51}
52
53void MockAuthenticator::LoginRetailMode() {
54  UserContext user_context("demo-mode");
55  user_context.SetUserIDHash("demo-mode");
56  consumer_->OnRetailModeAuthSuccess(user_context);
57}
58
59void MockAuthenticator::LoginOffTheRecord() {
60  consumer_->OnOffTheRecordAuthSuccess();
61}
62
63void MockAuthenticator::LoginAsPublicSession(const UserContext& user_context) {
64  UserContext logged_in_user_context = user_context;
65  logged_in_user_context.SetUserIDHash(logged_in_user_context.GetUserID());
66  consumer_->OnAuthSuccess(logged_in_user_context);
67}
68
69void MockAuthenticator::LoginAsKioskAccount(const std::string& app_user_id,
70                                            bool use_guest_mount) {
71  UserContext user_context(expected_user_context_.GetUserID());
72  user_context.SetUserIDHash(expected_user_context_.GetUserID());
73  consumer_->OnAuthSuccess(user_context);
74}
75
76void MockAuthenticator::OnRetailModeAuthSuccess() {
77  UserContext user_context(expected_user_context_.GetUserID());
78  user_context.SetUserIDHash(expected_user_context_.GetUserID());
79  consumer_->OnRetailModeAuthSuccess(user_context);
80}
81
82void MockAuthenticator::OnAuthSuccess() {
83  // If we want to be more like the real thing, we could save the user ID
84  // in AuthenticateToLogin, but there's not much of a point.
85  UserContext user_context(expected_user_context_);
86  user_context.SetUserIDHash(expected_user_context_.GetUserID());
87  consumer_->OnAuthSuccess(user_context);
88}
89
90void MockAuthenticator::OnAuthFailure(const AuthFailure& failure) {
91  consumer_->OnAuthFailure(failure);
92}
93
94void MockAuthenticator::RecoverEncryptedData(const std::string& old_password) {
95}
96
97void MockAuthenticator::ResyncEncryptedData() {
98}
99
100void MockAuthenticator::SetExpectedCredentials(
101    const UserContext& user_context) {
102  expected_user_context_ = user_context;
103}
104
105MockAuthenticator::~MockAuthenticator() {
106}
107
108}  // namespace chromeos
109