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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_FAKE_USER_MANAGER_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_FAKE_USER_MANAGER_H_
7
8#include <map>
9#include <string>
10
11#include "base/memory/scoped_ptr.h"
12#include "chrome/browser/chromeos/login/user_flow.h"
13#include "chrome/browser/chromeos/login/users/chrome_user_manager.h"
14#include "components/user_manager/user.h"
15#include "components/user_manager/user_image/user_image.h"
16
17namespace chromeos {
18
19class FakeSupervisedUserManager;
20
21// Fake user manager with a barebones implementation. Users can be added
22// and set as logged in, and those users can be returned.
23class FakeUserManager : public ChromeUserManager {
24 public:
25  FakeUserManager();
26  virtual ~FakeUserManager();
27
28  // Create and add a new user.
29  const user_manager::User* AddUser(const std::string& email);
30
31  // Create and add a kiosk app user.
32  void AddKioskAppUser(const std::string& kiosk_app_username);
33
34  // Create and add a public account user.
35  const user_manager::User* AddPublicAccountUser(const std::string& email);
36
37  // Calculates the user name hash and calls UserLoggedIn to login a user.
38  void LoginUser(const std::string& email);
39
40  // ChromeUserManager overrides.
41  virtual MultiProfileUserController* GetMultiProfileUserController() OVERRIDE;
42  virtual UserImageManager* GetUserImageManager(
43      const std::string& user_id) OVERRIDE;
44  virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE;
45  virtual void SetUserFlow(const std::string& email, UserFlow* flow) OVERRIDE {}
46  virtual UserFlow* GetCurrentUserFlow() const OVERRIDE;
47  virtual UserFlow* GetUserFlow(const std::string& email) const OVERRIDE;
48  virtual void ResetUserFlow(const std::string& email) OVERRIDE {}
49
50  // UserManager overrides.
51  virtual const user_manager::UserList& GetUsers() const OVERRIDE;
52  virtual user_manager::UserList GetUsersAdmittedForMultiProfile()
53      const OVERRIDE;
54  virtual const user_manager::UserList& GetLoggedInUsers() const OVERRIDE;
55
56  // Set the user as logged in.
57  virtual void UserLoggedIn(const std::string& email,
58                            const std::string& username_hash,
59                            bool browser_restart) OVERRIDE;
60
61  virtual const user_manager::User* GetActiveUser() const OVERRIDE;
62  virtual user_manager::User* GetActiveUser() OVERRIDE;
63  virtual void SwitchActiveUser(const std::string& email) OVERRIDE;
64  virtual void SaveUserDisplayName(const std::string& username,
65      const base::string16& display_name) OVERRIDE;
66
67  // Not implemented.
68  virtual void UpdateUserAccountData(
69      const std::string& user_id,
70      const UserAccountData& account_data) OVERRIDE {}
71  virtual void Shutdown() OVERRIDE {}
72  virtual const user_manager::UserList& GetLRULoggedInUsers() const OVERRIDE;
73  virtual user_manager::UserList GetUnlockUsers() const OVERRIDE;
74  virtual const std::string& GetOwnerEmail() const OVERRIDE;
75  virtual void SessionStarted() OVERRIDE {}
76  virtual void RemoveUser(const std::string& email,
77                          user_manager::RemoveUserDelegate* delegate) OVERRIDE {
78  }
79  virtual void RemoveUserFromList(const std::string& email) OVERRIDE;
80  virtual bool IsKnownUser(const std::string& email) const OVERRIDE;
81  virtual const user_manager::User* FindUser(
82      const std::string& email) const OVERRIDE;
83  virtual user_manager::User* FindUserAndModify(
84      const std::string& email) OVERRIDE;
85  virtual const user_manager::User* GetLoggedInUser() const OVERRIDE;
86  virtual user_manager::User* GetLoggedInUser() OVERRIDE;
87  virtual const user_manager::User* GetPrimaryUser() const OVERRIDE;
88  virtual void SaveUserOAuthStatus(
89      const std::string& username,
90      user_manager::User::OAuthTokenStatus oauth_token_status) OVERRIDE {}
91  virtual void SaveForceOnlineSignin(const std::string& user_id,
92                                     bool force_online_signin) OVERRIDE {}
93  virtual base::string16 GetUserDisplayName(
94      const std::string& username) const OVERRIDE;
95  virtual void SaveUserDisplayEmail(const std::string& username,
96      const std::string& display_email) OVERRIDE {}
97  virtual std::string GetUserDisplayEmail(
98      const std::string& username) const OVERRIDE;
99  virtual bool IsCurrentUserOwner() const OVERRIDE;
100  virtual bool IsCurrentUserNew() const OVERRIDE;
101  virtual bool IsCurrentUserNonCryptohomeDataEphemeral() const OVERRIDE;
102  virtual bool CanCurrentUserLock() const OVERRIDE;
103  virtual bool IsUserLoggedIn() const OVERRIDE;
104  virtual bool IsLoggedInAsRegularUser() const OVERRIDE;
105  virtual bool IsLoggedInAsDemoUser() const OVERRIDE;
106  virtual bool IsLoggedInAsPublicAccount() const OVERRIDE;
107  virtual bool IsLoggedInAsGuest() const OVERRIDE;
108  virtual bool IsLoggedInAsSupervisedUser() const OVERRIDE;
109  virtual bool IsLoggedInAsKioskApp() const OVERRIDE;
110  virtual bool IsLoggedInAsStub() const OVERRIDE;
111  virtual bool IsSessionStarted() const OVERRIDE;
112  virtual bool IsUserNonCryptohomeDataEphemeral(
113      const std::string& email) const OVERRIDE;
114  virtual void AddObserver(Observer* obs) OVERRIDE {}
115  virtual void RemoveObserver(Observer* obs) OVERRIDE {}
116  virtual void AddSessionStateObserver(
117      UserSessionStateObserver* obs) OVERRIDE {}
118  virtual void RemoveSessionStateObserver(
119      UserSessionStateObserver* obs) OVERRIDE {}
120  virtual void NotifyLocalStateChanged() OVERRIDE {}
121  virtual bool AreSupervisedUsersAllowed() const OVERRIDE;
122
123  // UserManagerBase overrides:
124  virtual bool AreEphemeralUsersEnabled() const OVERRIDE;
125  virtual const std::string& GetApplicationLocale() const OVERRIDE;
126  virtual PrefService* GetLocalState() const OVERRIDE;
127  virtual void HandleUserOAuthTokenStatusChange(
128      const std::string& user_id,
129      user_manager::User::OAuthTokenStatus status) const OVERRIDE {}
130  virtual bool IsEnterpriseManaged() const OVERRIDE;
131  virtual void LoadPublicAccounts(
132      std::set<std::string>* public_sessions_set) OVERRIDE {}
133  virtual void PerformPreUserListLoadingActions() OVERRIDE {}
134  virtual void PerformPostUserListLoadingActions() OVERRIDE {}
135  virtual void PerformPostUserLoggedInActions(bool browser_restart) OVERRIDE {}
136  virtual bool IsDemoApp(const std::string& user_id) const OVERRIDE;
137  virtual bool IsKioskApp(const std::string& user_id) const OVERRIDE;
138  virtual bool IsPublicAccountMarkedForRemoval(
139      const std::string& user_id) const OVERRIDE;
140  virtual void DemoAccountLoggedIn() OVERRIDE {}
141  virtual void KioskAppLoggedIn(const std::string& app_id) OVERRIDE {}
142  virtual void PublicAccountUserLoggedIn(user_manager::User* user) OVERRIDE {}
143  virtual void RetailModeUserLoggedIn() OVERRIDE {}
144  virtual void SupervisedUserLoggedIn(const std::string& user_id) OVERRIDE {}
145
146  void set_owner_email(const std::string& owner_email) {
147    owner_email_ = owner_email;
148  }
149
150  void set_multi_profile_user_controller(
151      MultiProfileUserController* controller) {
152    multi_profile_user_controller_ = controller;
153  }
154
155 private:
156  // We use this internal function for const-correctness.
157  user_manager::User* GetActiveUserInternal() const;
158
159  scoped_ptr<FakeSupervisedUserManager> supervised_user_manager_;
160  user_manager::UserList user_list_;
161  user_manager::UserList logged_in_users_;
162  std::string owner_email_;
163  user_manager::User* primary_user_;
164
165  // If set this is the active user. If empty, the first created user is the
166  // active user.
167  std::string active_user_id_;
168  MultiProfileUserController* multi_profile_user_controller_;
169
170  DISALLOW_COPY_AND_ASSIGN(FakeUserManager);
171};
172
173}  // namespace chromeos
174
175#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_FAKE_USER_MANAGER_H_
176