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_MOCK_USER_MANAGER_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_MOCK_USER_MANAGER_H_
7
8#include <string>
9
10#include "base/files/file_path.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/chromeos/login/user_flow.h"
13#include "chrome/browser/chromeos/login/users/avatar/mock_user_image_manager.h"
14#include "chrome/browser/chromeos/login/users/chrome_user_manager.h"
15#include "components/user_manager/user.h"
16#include "components/user_manager/user_image/user_image.h"
17#include "testing/gmock/include/gmock/gmock.h"
18
19namespace chromeos {
20
21class FakeSupervisedUserManager;
22
23class MockUserManager : public ChromeUserManager {
24 public:
25  MockUserManager();
26  virtual ~MockUserManager();
27
28  MOCK_METHOD0(Shutdown, void(void));
29  MOCK_CONST_METHOD0(GetUsersAdmittedForMultiProfile,
30                     user_manager::UserList(void));
31  MOCK_CONST_METHOD0(GetLoggedInUsers, const user_manager::UserList&(void));
32  MOCK_CONST_METHOD0(GetLRULoggedInUsers, const user_manager::UserList&(void));
33  MOCK_METHOD3(UserLoggedIn, void(
34      const std::string&, const std::string&, bool));
35  MOCK_METHOD1(SwitchActiveUser, void(const std::string& email));
36  MOCK_METHOD0(SessionStarted, void(void));
37  MOCK_METHOD2(RemoveUser,
38               void(const std::string&, user_manager::RemoveUserDelegate*));
39  MOCK_METHOD1(RemoveUserFromList, void(const std::string&));
40  MOCK_CONST_METHOD1(IsKnownUser, bool(const std::string&));
41  MOCK_CONST_METHOD1(FindUser, const user_manager::User*(const std::string&));
42  MOCK_METHOD1(FindUserAndModify, user_manager::User*(const std::string&));
43  MOCK_METHOD2(SaveUserOAuthStatus,
44               void(const std::string&, user_manager::User::OAuthTokenStatus));
45  MOCK_METHOD2(SaveForceOnlineSignin, void(const std::string&, bool));
46  MOCK_METHOD2(SaveUserDisplayName, void(const std::string&,
47                                         const base::string16&));
48  MOCK_METHOD2(UpdateUserAccountData,
49               void(const std::string&, const UserAccountData&));
50  MOCK_CONST_METHOD1(GetUserDisplayName, base::string16(const std::string&));
51  MOCK_METHOD2(SaveUserDisplayEmail, void(const std::string&,
52                                          const std::string&));
53  MOCK_CONST_METHOD1(GetUserDisplayEmail, std::string(const std::string&));
54  MOCK_CONST_METHOD0(IsCurrentUserOwner, bool(void));
55  MOCK_CONST_METHOD0(IsCurrentUserNew, bool(void));
56  MOCK_CONST_METHOD0(IsCurrentUserNonCryptohomeDataEphemeral, bool(void));
57  MOCK_CONST_METHOD0(CanCurrentUserLock, bool(void));
58  MOCK_CONST_METHOD0(IsUserLoggedIn, bool(void));
59  MOCK_CONST_METHOD0(IsLoggedInAsRegularUser, bool(void));
60  MOCK_CONST_METHOD0(IsLoggedInAsDemoUser, bool(void));
61  MOCK_CONST_METHOD0(IsLoggedInAsPublicAccount, bool(void));
62  MOCK_CONST_METHOD0(IsLoggedInAsGuest, bool(void));
63  MOCK_CONST_METHOD0(IsLoggedInAsSupervisedUser, bool(void));
64  MOCK_CONST_METHOD0(IsLoggedInAsKioskApp, bool(void));
65  MOCK_CONST_METHOD0(IsLoggedInAsStub, bool(void));
66  MOCK_CONST_METHOD0(IsSessionStarted, bool(void));
67  MOCK_CONST_METHOD1(IsUserNonCryptohomeDataEphemeral,
68                     bool(const std::string&));
69  MOCK_METHOD1(AddObserver, void(UserManager::Observer*));
70  MOCK_METHOD1(RemoveObserver, void(UserManager::Observer*));
71  MOCK_METHOD1(AddSessionStateObserver,
72               void(UserManager::UserSessionStateObserver*));
73  MOCK_METHOD1(RemoveSessionStateObserver,
74               void(UserManager::UserSessionStateObserver*));
75  MOCK_METHOD0(NotifyLocalStateChanged, void(void));
76  MOCK_CONST_METHOD0(AreSupervisedUsersAllowed, bool(void));
77
78  // UserManagerBase overrides:
79  MOCK_CONST_METHOD0(AreEphemeralUsersEnabled, bool(void));
80  MOCK_CONST_METHOD0(GetApplicationLocale, const std::string&(void));
81  MOCK_CONST_METHOD0(GetLocalState, PrefService*(void));
82  MOCK_CONST_METHOD2(HandleUserOAuthTokenStatusChange,
83                     void(const std::string&,
84                          user_manager::User::OAuthTokenStatus status));
85  MOCK_CONST_METHOD0(IsEnterpriseManaged, bool(void));
86  MOCK_METHOD1(LoadPublicAccounts, void(std::set<std::string>*));
87  MOCK_METHOD0(PerformPreUserListLoadingActions, void(void));
88  MOCK_METHOD0(PerformPostUserListLoadingActions, void(void));
89  MOCK_METHOD1(PerformPostUserLoggedInActions, void(bool));
90  MOCK_CONST_METHOD1(IsDemoApp, bool(const std::string&));
91  MOCK_CONST_METHOD1(IsKioskApp, bool(const std::string&));
92  MOCK_CONST_METHOD1(IsPublicAccountMarkedForRemoval, bool(const std::string&));
93  MOCK_METHOD0(DemoAccountLoggedIn, void(void));
94  MOCK_METHOD1(KioskAppLoggedIn, void(const std::string&));
95  MOCK_METHOD1(PublicAccountUserLoggedIn, void(user_manager::User*));
96  MOCK_METHOD0(RetailModeUserLoggedIn, void(void));
97  MOCK_METHOD1(SupervisedUserLoggedIn, void(const std::string&));
98
99  // You can't mock these functions easily because nobody can create
100  // User objects but the ChromeUserManager and us.
101  virtual const user_manager::UserList& GetUsers() const OVERRIDE;
102  virtual const user_manager::User* GetLoggedInUser() const OVERRIDE;
103  virtual user_manager::UserList GetUnlockUsers() const OVERRIDE;
104  virtual const std::string& GetOwnerEmail() const OVERRIDE;
105  virtual user_manager::User* GetLoggedInUser() OVERRIDE;
106  virtual const user_manager::User* GetActiveUser() const OVERRIDE;
107  virtual user_manager::User* GetActiveUser() OVERRIDE;
108  virtual const user_manager::User* GetPrimaryUser() const OVERRIDE;
109
110  // ChromeUserManager overrides:
111  virtual MultiProfileUserController* GetMultiProfileUserController() OVERRIDE;
112  virtual UserImageManager* GetUserImageManager(
113      const std::string& user_id) OVERRIDE;
114  virtual SupervisedUserManager* GetSupervisedUserManager() OVERRIDE;
115  MOCK_METHOD2(SetUserFlow, void(const std::string&, UserFlow*));
116  MOCK_METHOD1(ResetUserFlow, void(const std::string&));
117  virtual UserFlow* GetCurrentUserFlow() const OVERRIDE;
118  virtual UserFlow* GetUserFlow(const std::string&) const OVERRIDE;
119
120  // Sets a new User instance. Users previously created by this MockUserManager
121  // become invalid.
122  void SetActiveUser(const std::string& email);
123
124  // Creates a new public session user. Users previously created by this
125  // MockUserManager become invalid.
126  user_manager::User* CreatePublicAccountUser(const std::string& email);
127
128  // Adds a new User instance to the back of the user list. Users previously
129  // created by this MockUserManager remain valid.
130  void AddUser(const std::string& email);
131
132  // Clears the user list and the active user. Users previously created by this
133  // MockUserManager become invalid.
134  void ClearUserList();
135
136  scoped_ptr<UserFlow> user_flow_;
137  scoped_ptr<MockUserImageManager> user_image_manager_;
138  scoped_ptr<FakeSupervisedUserManager> supervised_user_manager_;
139  user_manager::UserList user_list_;
140};
141
142}  // namespace chromeos
143
144#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_MOCK_USER_MANAGER_H_
145