| // 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 "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); |
| |
| // Subsequent calls to IsCurrentUserCryptohomeDataEphemeral for |
| // |account_id| will return |is_ephemeral|. |
| void SetUserCryptohomeDataEphemeral(const AccountId& account_id, |
| bool is_ephemeral); |
| |
| // 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 {} |
| 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 {} |
| void SaveUserDisplayEmail(const AccountId& account_id, |
| const std::string& display_email) override {} |
| std::optional<std::string> GetOwnerEmail() override; |
| bool IsCurrentUserNonCryptohomeDataEphemeral() const override; |
| bool IsUserLoggedIn() const override; |
| bool IsLoggedInAsUserWithGaiaAccount() const override; |
| bool IsLoggedInAsManagedGuestSession() const override; |
| bool IsLoggedInAsGuest() const override; |
| bool IsLoggedInAsKioskApp() const override; |
| bool IsLoggedInAsWebKioskApp() const override; |
| bool IsLoggedInAsAnyKioskApp() const override; |
| bool IsLoggedInAsStub() const override; |
| bool IsUserNonCryptohomeDataEphemeral( |
| const AccountId& account_id) const override; |
| bool IsUserCryptohomeDataEphemeral( |
| const AccountId& account_id) const override; |
| bool IsGuestSessionAllowed() const override; |
| bool IsGaiaUserAllowed(const User& user) const override; |
| bool IsUserAllowed(const User& user) const override; |
| bool IsDeprecatedSupervisedAccountId( |
| const AccountId& account_id) const override; |
| |
| // UserManagerBase overrides: |
| bool IsDeviceLocalAccountMarkedForRemoval( |
| const AccountId& account_id) const override; |
| void SetUserAffiliated(const AccountId& account_id, |
| bool is_affiliated) override {} |
| |
| // Just make it public for tests. |
| using UserManagerBase::ResetOwnerId; |
| using UserManagerBase::SetEphemeralModeConfig; |
| using UserManagerBase::SetOwnerId; |
| |
| protected: |
| // If set this is the active user. If empty, the first created user is the |
| // active user. |
| AccountId active_account_id_ = EmptyAccountId(); |
| |
| 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_; |
| |
| // Contains AccountIds for which IsCurrentUserNonCryptohomeDataEphemeral will |
| // return true. |
| std::set<AccountId> accounts_with_ephemeral_non_cryptohome_data_; |
| |
| // Contains AccountIds for which IsCurrentUserCryptohomeDataEphemeral will |
| // return the specific value. |
| base::flat_map<AccountId, bool> accounts_with_ephemeral_cryptohome_data_; |
| }; |
| |
| } // namespace user_manager |
| |
| #endif // COMPONENTS_USER_MANAGER_FAKE_USER_MANAGER_H_ |