blob: 33af609542e5774ea51235a922b83b97800c3b7b [file] [log] [blame]
merkulova793f3022015-02-04 10:18:301// 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 "components/user_manager/fake_user_manager.h"
6
alematebc19dbb2016-11-01 19:49:077#include <algorithm>
8
merkulova793f3022015-02-04 10:18:309#include "base/callback.h"
alemate33433e22016-01-13 14:50:3010#include "base/command_line.h"
11#include "base/sys_info.h"
merkulova793f3022015-02-04 10:18:3012#include "base/task_runner.h"
alemate33433e22016-01-13 14:50:3013#include "chromeos/chromeos_switches.h"
alemate3c1c0882016-10-27 19:05:1214#include "components/user_manager/user_names.h"
merkulova793f3022015-02-04 10:18:3015#include "components/user_manager/user_type.h"
merkulova793f3022015-02-04 10:18:3016
17namespace {
18
19class FakeTaskRunner : public base::TaskRunner {
20 public:
Brett Wilson1c990022017-09-12 20:11:1521 bool PostDelayedTask(const base::Location& from_here,
tzik6e427842017-04-05 10:13:2122 base::OnceClosure task,
merkulova793f3022015-02-04 10:18:3023 base::TimeDelta delay) override {
tzik070c8ffb2017-03-29 05:28:1224 std::move(task).Run();
merkulova793f3022015-02-04 10:18:3025 return true;
26 }
peary23322df62017-05-09 03:55:4827 bool RunsTasksInCurrentSequence() const override { return true; }
merkulova793f3022015-02-04 10:18:3028
29 protected:
30 ~FakeTaskRunner() override {}
31};
32
33} // namespace
34
35namespace user_manager {
36
37FakeUserManager::FakeUserManager()
alemate33433e22016-01-13 14:50:3038 : UserManagerBase(new FakeTaskRunner()), primary_user_(nullptr) {}
merkulova793f3022015-02-04 10:18:3039
40FakeUserManager::~FakeUserManager() {
41}
42
alemate3ffbde6f2015-11-03 02:02:5543const user_manager::User* FakeUserManager::AddUser(
44 const AccountId& account_id) {
45 return AddUserWithAffiliation(account_id, false);
peletskyi2b8c9d232015-07-31 16:23:5846}
47
48const user_manager::User* FakeUserManager::AddUserWithAffiliation(
alemate3ffbde6f2015-11-03 02:02:5549 const AccountId& account_id,
50 bool is_affiliated) {
51 user_manager::User* user = user_manager::User::CreateRegularUser(account_id);
peletskyic8452f22016-02-23 15:26:1252 user->SetAffiliation(is_affiliated);
merkulova793f3022015-02-04 10:18:3053 users_.push_back(user);
54 return user;
55}
56
atwilsond5a7eabf2017-03-09 13:18:3957void FakeUserManager::OnProfileInitialized(User* user) {
58 user->set_profile_ever_initialized(true);
59}
60
alemate3ffbde6f2015-11-03 02:02:5561void FakeUserManager::RemoveUserFromList(const AccountId& account_id) {
alematebc19dbb2016-11-01 19:49:0762 const user_manager::UserList::iterator it =
63 std::find_if(users_.begin(), users_.end(),
64 [&account_id](const user_manager::User* user) {
65 return user->GetAccountId() == account_id;
66 });
merkulova793f3022015-02-04 10:18:3067 if (it != users_.end()) {
xdai20e579f2016-06-02 06:58:0168 if (primary_user_ == *it)
69 primary_user_ = nullptr;
rsorokin79e93442016-04-29 07:54:1270 if (active_user_ != *it)
71 delete *it;
merkulova793f3022015-02-04 10:18:3072 users_.erase(it);
73 }
74}
75
76const user_manager::UserList& FakeUserManager::GetUsers() const {
77 return users_;
78}
79
80user_manager::UserList FakeUserManager::GetUsersAllowedForMultiProfile() const {
81 user_manager::UserList result;
82 for (user_manager::UserList::const_iterator it = users_.begin();
83 it != users_.end(); ++it) {
84 if ((*it)->GetType() == user_manager::USER_TYPE_REGULAR &&
85 !(*it)->is_logged_in())
86 result.push_back(*it);
87 }
88 return result;
89}
90
alemate3ffbde6f2015-11-03 02:02:5591void FakeUserManager::UserLoggedIn(const AccountId& account_id,
merkulova793f3022015-02-04 10:18:3092 const std::string& username_hash,
93 bool browser_restart) {
94 for (user_manager::UserList::const_iterator it = users_.begin();
95 it != users_.end(); ++it) {
96 if ((*it)->username_hash() == username_hash) {
97 (*it)->set_is_logged_in(true);
Sam McNallyf4dab612017-08-16 03:06:3398 (*it)->SetProfileIsCreated();
merkulova793f3022015-02-04 10:18:3099 logged_in_users_.push_back(*it);
100
101 if (!primary_user_)
102 primary_user_ = *it;
xiyuan94a81dea2017-05-25 14:31:03103 if (!active_user_)
104 active_user_ = *it;
merkulova793f3022015-02-04 10:18:30105 break;
106 }
107 }
xiyuan94a81dea2017-05-25 14:31:03108
109 if (!active_user_ && AreEphemeralUsersEnabled())
110 RegularUserLoggedInAsEphemeral(account_id);
merkulova793f3022015-02-04 10:18:30111}
112
113user_manager::User* FakeUserManager::GetActiveUserInternal() const {
rsorokin79e93442016-04-29 07:54:12114 if (active_user_ != nullptr)
115 return active_user_;
116
alemate3ffbde6f2015-11-03 02:02:55117 if (!users_.empty()) {
118 if (active_account_id_.is_valid()) {
merkulova793f3022015-02-04 10:18:30119 for (user_manager::UserList::const_iterator it = users_.begin();
120 it != users_.end(); ++it) {
peletskyi086021092016-04-25 11:27:56121 if ((*it)->GetAccountId() == active_account_id_)
merkulova793f3022015-02-04 10:18:30122 return *it;
123 }
124 }
125 return users_[0];
126 }
alemate3ffbde6f2015-11-03 02:02:55127 return nullptr;
merkulova793f3022015-02-04 10:18:30128}
129
130const user_manager::User* FakeUserManager::GetActiveUser() const {
131 return GetActiveUserInternal();
132}
133
134user_manager::User* FakeUserManager::GetActiveUser() {
135 return GetActiveUserInternal();
136}
137
alemate3ffbde6f2015-11-03 02:02:55138void FakeUserManager::SwitchActiveUser(const AccountId& account_id) {}
merkulova793f3022015-02-04 10:18:30139
alemate3ffbde6f2015-11-03 02:02:55140void FakeUserManager::SaveUserDisplayName(const AccountId& account_id,
merkulova793f3022015-02-04 10:18:30141 const base::string16& display_name) {
142 for (user_manager::UserList::iterator it = users_.begin(); it != users_.end();
143 ++it) {
alematebc19dbb2016-11-01 19:49:07144 if ((*it)->GetAccountId() == account_id) {
merkulova793f3022015-02-04 10:18:30145 (*it)->set_display_name(display_name);
146 return;
147 }
148 }
149}
150
151const user_manager::UserList& FakeUserManager::GetLRULoggedInUsers() const {
152 return users_;
153}
154
155user_manager::UserList FakeUserManager::GetUnlockUsers() const {
156 return users_;
157}
158
alemate3ffbde6f2015-11-03 02:02:55159const AccountId& FakeUserManager::GetOwnerAccountId() const {
160 return owner_account_id_;
merkulova793f3022015-02-04 10:18:30161}
162
alemate3ffbde6f2015-11-03 02:02:55163bool FakeUserManager::IsKnownUser(const AccountId& account_id) const {
merkulova793f3022015-02-04 10:18:30164 return true;
165}
166
167const user_manager::User* FakeUserManager::FindUser(
alemate3ffbde6f2015-11-03 02:02:55168 const AccountId& account_id) const {
rsorokin79e93442016-04-29 07:54:12169 if (active_user_ != nullptr && active_user_->GetAccountId() == account_id)
170 return active_user_;
171
merkulova793f3022015-02-04 10:18:30172 const user_manager::UserList& users = GetUsers();
173 for (user_manager::UserList::const_iterator it = users.begin();
174 it != users.end(); ++it) {
rsorokin79e93442016-04-29 07:54:12175 if ((*it)->GetAccountId() == account_id)
merkulova793f3022015-02-04 10:18:30176 return *it;
177 }
rsorokin79e93442016-04-29 07:54:12178
alemate3ffbde6f2015-11-03 02:02:55179 return nullptr;
merkulova793f3022015-02-04 10:18:30180}
181
182user_manager::User* FakeUserManager::FindUserAndModify(
alemate3ffbde6f2015-11-03 02:02:55183 const AccountId& account_id) {
184 return nullptr;
merkulova793f3022015-02-04 10:18:30185}
186
merkulova793f3022015-02-04 10:18:30187const user_manager::User* FakeUserManager::GetPrimaryUser() const {
188 return primary_user_;
189}
190
191base::string16 FakeUserManager::GetUserDisplayName(
alemate3ffbde6f2015-11-03 02:02:55192 const AccountId& account_id) const {
merkulova793f3022015-02-04 10:18:30193 return base::string16();
194}
195
196std::string FakeUserManager::GetUserDisplayEmail(
alemate3ffbde6f2015-11-03 02:02:55197 const AccountId& account_id) const {
merkulova793f3022015-02-04 10:18:30198 return std::string();
199}
200
201bool FakeUserManager::IsCurrentUserOwner() const {
202 return false;
203}
204
205bool FakeUserManager::IsCurrentUserNew() const {
206 return false;
207}
208
209bool FakeUserManager::IsCurrentUserNonCryptohomeDataEphemeral() const {
210 return false;
211}
212
213bool FakeUserManager::CanCurrentUserLock() const {
214 return false;
215}
216
217bool FakeUserManager::IsUserLoggedIn() const {
218 return logged_in_users_.size() > 0;
219}
220
221bool FakeUserManager::IsLoggedInAsUserWithGaiaAccount() const {
222 return true;
223}
224
225bool FakeUserManager::IsLoggedInAsPublicAccount() const {
226 return false;
227}
228
229bool FakeUserManager::IsLoggedInAsGuest() const {
230 return false;
231}
232
233bool FakeUserManager::IsLoggedInAsSupervisedUser() const {
234 return false;
235}
236
237bool FakeUserManager::IsLoggedInAsKioskApp() const {
238 const user_manager::User* active_user = GetActiveUser();
239 return active_user
240 ? active_user->GetType() == user_manager::USER_TYPE_KIOSK_APP
241 : false;
242}
243
peletskyi53c440d2016-10-25 15:09:55244bool FakeUserManager::IsLoggedInAsArcKioskApp() const {
245 const user_manager::User* active_user = GetActiveUser();
246 return active_user
247 ? active_user->GetType() == user_manager::USER_TYPE_ARC_KIOSK_APP
248 : false;
249}
250
merkulova793f3022015-02-04 10:18:30251bool FakeUserManager::IsLoggedInAsStub() const {
252 return false;
253}
254
merkulova793f3022015-02-04 10:18:30255bool FakeUserManager::IsUserNonCryptohomeDataEphemeral(
alemate3ffbde6f2015-11-03 02:02:55256 const AccountId& account_id) const {
merkulova793f3022015-02-04 10:18:30257 return false;
258}
259
260bool FakeUserManager::AreSupervisedUsersAllowed() const {
261 return true;
262}
263
Daria Yakovlevaea3ce4b2017-10-11 19:51:59264bool FakeUserManager::IsGuestSessionAllowed() const {
265 return true;
266}
267
268bool FakeUserManager::IsGaiaUserAllowed(const user_manager::User& user) const {
269 return true;
270}
271
272bool FakeUserManager::IsUserAllowed(const user_manager::User& user) const {
273 return true;
274}
275
merkulova793f3022015-02-04 10:18:30276bool FakeUserManager::AreEphemeralUsersEnabled() const {
xiyuan94a81dea2017-05-25 14:31:03277 return GetEphemeralUsersEnabled();
278}
279
280void FakeUserManager::SetEphemeralUsersEnabled(bool enabled) {
281 UserManagerBase::SetEphemeralUsersEnabled(enabled);
merkulova793f3022015-02-04 10:18:30282}
283
284const std::string& FakeUserManager::GetApplicationLocale() const {
285 static const std::string default_locale("en-US");
286 return default_locale;
287}
288
289PrefService* FakeUserManager::GetLocalState() const {
alemate3ffbde6f2015-11-03 02:02:55290 return nullptr;
merkulova793f3022015-02-04 10:18:30291}
292
293bool FakeUserManager::IsEnterpriseManaged() const {
294 return false;
295}
296
alemate3ffbde6f2015-11-03 02:02:55297bool FakeUserManager::IsDemoApp(const AccountId& account_id) const {
alemate3c1c0882016-10-27 19:05:12298 return account_id == DemoAccountId();
merkulova793f3022015-02-04 10:18:30299}
300
xiyuand4f04572016-04-19 18:22:53301bool FakeUserManager::IsDeviceLocalAccountMarkedForRemoval(
alemate3ffbde6f2015-11-03 02:02:55302 const AccountId& account_id) const {
merkulova793f3022015-02-04 10:18:30303 return false;
304}
305
alemate33433e22016-01-13 14:50:30306void FakeUserManager::UpdateLoginState(const user_manager::User* active_user,
307 const user_manager::User* primary_user,
308 bool is_current_user_owner) const {}
309
310bool FakeUserManager::GetPlatformKnownUserId(const std::string& user_email,
311 const std::string& gaia_id,
312 AccountId* out_account_id) const {
tnagel8a6524042017-06-16 21:35:46313 if (user_email == kStubUserEmail) {
alemate3c1c0882016-10-27 19:05:12314 *out_account_id = StubAccountId();
alemate33433e22016-01-13 14:50:30315 return true;
316 }
317
alemate3c1c0882016-10-27 19:05:12318 if (user_email == kGuestUserName) {
319 *out_account_id = GuestAccountId();
alemate33433e22016-01-13 14:50:30320 return true;
321 }
322 return false;
323}
324
325const AccountId& FakeUserManager::GetGuestAccountId() const {
alemate3c1c0882016-10-27 19:05:12326 return GuestAccountId();
alemate33433e22016-01-13 14:50:30327}
328
329bool FakeUserManager::IsFirstExecAfterBoot() const {
330 return base::CommandLine::ForCurrentProcess()->HasSwitch(
331 chromeos::switches::kFirstExecAfterBoot);
332}
333
334void FakeUserManager::AsyncRemoveCryptohome(const AccountId& account_id) const {
335 NOTIMPLEMENTED();
336}
337
338bool FakeUserManager::IsGuestAccountId(const AccountId& account_id) const {
alemate3c1c0882016-10-27 19:05:12339 return account_id == GuestAccountId();
alemate33433e22016-01-13 14:50:30340}
341
342bool FakeUserManager::IsStubAccountId(const AccountId& account_id) const {
alemate3c1c0882016-10-27 19:05:12343 return account_id == StubAccountId();
alemate33433e22016-01-13 14:50:30344}
345
346bool FakeUserManager::IsSupervisedAccountId(const AccountId& account_id) const {
347 return false;
348}
349
350bool FakeUserManager::HasBrowserRestarted() const {
351 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
352 return base::SysInfo::IsRunningOnChromeOS() &&
353 command_line->HasSwitch(chromeos::switches::kLoginUser);
354}
355
alemate9e6d7102016-01-13 16:04:48356const gfx::ImageSkia& FakeUserManager::GetResourceImagekiaNamed(int id) const {
357 NOTIMPLEMENTED();
358 return empty_image_;
359}
360
361base::string16 FakeUserManager::GetResourceStringUTF16(int string_id) const {
362 return base::string16();
363}
364
alemate33433e22016-01-13 14:50:30365void FakeUserManager::ScheduleResolveLocale(
366 const std::string& locale,
367 const base::Closure& on_resolved_callback,
368 std::string* out_resolved_locale) const {
369 NOTIMPLEMENTED();
370 return;
371}
372
alemate9e6d7102016-01-13 16:04:48373bool FakeUserManager::IsValidDefaultUserImageId(int image_index) const {
374 NOTIMPLEMENTED();
375 return false;
376}
377
merkulova793f3022015-02-04 10:18:30378} // namespace user_manager