1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_USER_MANAGER_FAKE_USER_MANAGER_H_
#define COMPONENTS_USER_MANAGER_FAKE_USER_MANAGER_H_
#include <map>
#include <set>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/strings/string_piece.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/user.h"
#include "components/user_manager/user_manager_base.h"
namespace user_manager {
// Fake user manager with a barebones implementation. Users can be added
// and set as logged in, and those users can be returned.
class USER_MANAGER_EXPORT FakeUserManager : public UserManagerBase {
public:
explicit FakeUserManager(PrefService* local_state = nullptr);
FakeUserManager(const FakeUserManager&) = delete;
FakeUserManager& operator=(const FakeUserManager&) = delete;
~FakeUserManager() override;
// Returns the fake username hash for testing.
// Valid AccountId must be used, otherwise DCHECKed.
static std::string GetFakeUsernameHash(const AccountId& account_id);
// Create and add a new user. Created user is not affiliated with the domain,
// that owns the device.
const User* AddUser(const AccountId& account_id);
const User* AddChildUser(const AccountId& account_id);
const User* AddGuestUser(const AccountId& account_id);
const User* AddKioskAppUser(const AccountId& account_id);
// The same as AddUser() but allows to specify user affiliation with the
// domain, that owns the device.
const User* AddUserWithAffiliation(const AccountId& account_id,
bool is_affiliated);
// Create and add a new public account. Created user is not affiliated with
// the domain, that owns the device.
virtual const user_manager::User* AddPublicAccountUser(
const AccountId& account_id);
void LogoutAllUsers();
// Subsequent calls to IsCurrentUserNonCryptohomeDataEphemeral for
// |account_id| will return |is_ephemeral|.
void SetUserNonCryptohomeDataEphemeral(const AccountId& account_id,
bool is_ephemeral);
void set_is_current_user_owner(bool is_current_user_owner) {
is_current_user_owner_ = is_current_user_owner;
}
// UserManager overrides.
const UserList& GetUsers() const override;
UserList GetUsersAllowedForMultiProfile() const override;
void UpdateUserAccountData(const AccountId& account_id,
const UserAccountData& account_data) override;
// Set the user as logged in.
void UserLoggedIn(const AccountId& account_id,
const std::string& username_hash,
bool browser_restart,
bool is_child) override;
const User* GetActiveUser() const override;
User* GetActiveUser() override;
void SwitchActiveUser(const AccountId& account_id) override;
void SaveUserDisplayName(const AccountId& account_id,
const std::u16string& display_name) override;
// Not implemented.
void Shutdown() override {}
const UserList& GetLRULoggedInUsers() const override;
UserList GetUnlockUsers() const override;
const AccountId& GetOwnerAccountId() const override;
void OnSessionStarted() override {}
void RemoveUser(const AccountId& account_id,
UserRemovalReason reason) override {}
void RemoveUserFromList(const AccountId& account_id) override;
void RemoveUserFromListForRecreation(const AccountId& account_id) override;
bool IsKnownUser(const AccountId& account_id) const override;
const User* FindUser(const AccountId& account_id) const override;
User* FindUserAndModify(const AccountId& account_id) override;
void SaveUserOAuthStatus(const AccountId& account_id,
User::OAuthTokenStatus oauth_token_status) override {
}
void SaveForceOnlineSignin(const AccountId& account_id,
bool force_online_signin) override {}
std::u16string GetUserDisplayName(const AccountId& account_id) const override;
void SaveUserDisplayEmail(const AccountId& account_id,
const std::string& display_email) override {}
absl::optional<std::string> GetOwnerEmail() override;
bool IsCurrentUserOwner() const override;
bool IsCurrentUserNonCryptohomeDataEphemeral() const override;
bool CanCurrentUserLock() const override;
bool IsUserLoggedIn() const override;
bool IsLoggedInAsUserWithGaiaAccount() const override;
bool IsLoggedInAsManagedGuestSession() const override;
bool IsLoggedInAsGuest() const override;
bool IsLoggedInAsKioskApp() const override;
bool IsLoggedInAsArcKioskApp() const override;
bool IsLoggedInAsWebKioskApp() const override;
bool IsLoggedInAsAnyKioskApp() const override;
bool IsLoggedInAsStub() const override;
bool IsUserNonCryptohomeDataEphemeral(
const AccountId& account_id) const override;
void AddObserver(Observer* obs) override {}
void RemoveObserver(Observer* obs) override {}
void AddSessionStateObserver(UserSessionStateObserver* obs) override {}
void RemoveSessionStateObserver(UserSessionStateObserver* obs) override {}
void NotifyLocalStateChanged() override {}
bool IsGuestSessionAllowed() const override;
bool IsGaiaUserAllowed(const User& user) const override;
bool IsUserAllowed(const User& user) const override;
void AsyncRemoveCryptohome(const AccountId& account_id) const override;
bool IsDeprecatedSupervisedAccountId(
const AccountId& account_id) const override;
const gfx::ImageSkia& GetResourceImageSkiaNamed(int id) const override;
std::u16string GetResourceStringUTF16(int string_id) const override;
void ScheduleResolveLocale(const std::string& locale,
base::OnceClosure on_resolved_callback,
std::string* out_resolved_locale) const override;
bool IsValidDefaultUserImageId(int image_index) const override;
// UserManagerBase overrides:
void SetEphemeralModeConfig(
EphemeralModeConfig ephemeral_mode_config) override;
const std::string& GetApplicationLocale() const override;
bool IsEnterpriseManaged() const override;
void LoadDeviceLocalAccounts(
std::set<AccountId>* device_local_accounts_set) override {}
void PerformPostUserLoggedInActions(bool browser_restart) override {}
bool IsDeviceLocalAccountMarkedForRemoval(
const AccountId& account_id) const override;
void KioskAppLoggedIn(User* user) override {}
void PublicAccountUserLoggedIn(User* user) override {}
protected:
// If set this is the active user. If empty, the first created user is the
// active user.
AccountId active_account_id_ = EmptyAccountId();
bool IsEphemeralAccountIdByPolicy(const AccountId& account_id) const override;
private:
// We use this internal function for const-correctness.
User* GetActiveUserInternal() const;
// stub, always empty.
AccountId owner_account_id_ = EmptyAccountId();
// stub. Always empty.
gfx::ImageSkia empty_image_;
bool is_current_user_owner_ = false;
// Contains AccountIds for which IsCurrentUserNonCryptohomeDataEphemeral will
// return true.
std::set<AccountId> accounts_with_ephemeral_non_cryptohome_data_;
};
} // namespace user_manager
#endif // COMPONENTS_USER_MANAGER_FAKE_USER_MANAGER_H_
|