text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // 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 <string>
  
  #include "base/macros.h"
  #include "components/signin/core/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:
    FakeUserManager();
    ~FakeUserManager() override;
  
    // Create and add a new user. Created user is not affiliated with the domain,
    // that owns the device.
    virtual const user_manager::User* AddUser(const AccountId& account_id);
  
    // The same as AddUser() but allows to specify user affiliation with the
    // domain, that owns the device.
    virtual const user_manager::User* AddUserWithAffiliation(
        const AccountId& account_id,
        bool is_affiliated);
  
    // Calculates the user name hash and calls UserLoggedIn to login a user.
    void LoginUser(const AccountId& account_id);
  
    // UserManager overrides.
    const user_manager::UserList& GetUsers() const override;
    user_manager::UserList GetUsersAllowedForMultiProfile() const override;
    const user_manager::UserList& GetLoggedInUsers() const override;
  
    // Set the user as logged in.
    void UserLoggedIn(const AccountId& account_id,
                      const std::string& username_hash,
                      bool browser_restart) override;
  
    const user_manager::User* GetActiveUser() const override;
    user_manager::User* GetActiveUser() override;
    void SwitchActiveUser(const AccountId& account_id) override;
    void SaveUserDisplayName(const AccountId& account_id,
                             const base::string16& display_name) override;
    const AccountId& GetGuestAccountId() const override;
    bool IsFirstExecAfterBoot() const override;
    bool IsGuestAccountId(const AccountId& account_id) const override;
    bool IsStubAccountId(const AccountId& account_id) const override;
    bool HasBrowserRestarted() const override;
  
    // Not implemented.
    void UpdateUserAccountData(const AccountId& account_id,
                               const UserAccountData& account_data) override {}
    void Shutdown() override {}
    const user_manager::UserList& GetLRULoggedInUsers() const override;
    user_manager::UserList GetUnlockUsers() const override;
    const AccountId& GetOwnerAccountId() const override;
    void OnSessionStarted() override {}
    void RemoveUser(const AccountId& account_id,
                    user_manager::RemoveUserDelegate* delegate) override {}
    void RemoveUserFromList(const AccountId& account_id) override;
    bool IsKnownUser(const AccountId& account_id) const override;
    const user_manager::User* FindUser(
        const AccountId& account_id) const override;
    user_manager::User* FindUserAndModify(const AccountId& account_id) override;
    const user_manager::User* GetPrimaryUser() const override;
    void SaveUserOAuthStatus(
        const AccountId& account_id,
        user_manager::User::OAuthTokenStatus oauth_token_status) override {}
    void SaveForceOnlineSignin(const AccountId& account_id,
                               bool force_online_signin) override {}
    base::string16 GetUserDisplayName(const AccountId& account_id) const override;
    void SaveUserDisplayEmail(const AccountId& account_id,
                              const std::string& display_email) override {}
    std::string GetUserDisplayEmail(const AccountId& account_id) const override;
    bool IsCurrentUserOwner() const override;
    bool IsCurrentUserNew() const override;
    bool IsCurrentUserNonCryptohomeDataEphemeral() const override;
    bool CanCurrentUserLock() const override;
    bool IsUserLoggedIn() const override;
    bool IsLoggedInAsUserWithGaiaAccount() const override;
    bool IsLoggedInAsPublicAccount() const override;
    bool IsLoggedInAsGuest() const override;
    bool IsLoggedInAsSupervisedUser() const override;
    bool IsLoggedInAsKioskApp() const override;
    bool IsLoggedInAsArcKioskApp() 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 AreSupervisedUsersAllowed() const override;
    void UpdateLoginState(const user_manager::User* active_user,
                          const user_manager::User* primary_user,
                          bool is_current_user_owner) const override;
    bool GetPlatformKnownUserId(const std::string& user_email,
                                const std::string& gaia_id,
                                AccountId* out_account_id) const override;
    void AsyncRemoveCryptohome(const AccountId& account_id) const override;
    bool IsSupervisedAccountId(const AccountId& account_id) const override;
    const gfx::ImageSkia& GetResourceImagekiaNamed(int id) const override;
    base::string16 GetResourceStringUTF16(int string_id) const override;
    void ScheduleResolveLocale(const std::string& locale,
                               const base::Closure& on_resolved_callback,
                               std::string* out_resolved_locale) const override;
    bool IsValidDefaultUserImageId(int image_index) const override;
  
    // UserManagerBase overrides:
    bool AreEphemeralUsersEnabled() const override;
    const std::string& GetApplicationLocale() const override;
    PrefService* GetLocalState() const override;
    void HandleUserOAuthTokenStatusChange(
        const AccountId& account_id,
        user_manager::User::OAuthTokenStatus status) const override {}
    bool IsEnterpriseManaged() const override;
    void LoadDeviceLocalAccounts(
        std::set<AccountId>* device_local_accounts_set) override {}
    void PerformPreUserListLoadingActions() override {}
    void PerformPostUserListLoadingActions() override {}
    void PerformPostUserLoggedInActions(bool browser_restart) override {}
    bool IsDemoApp(const AccountId& account_id) const override;
    bool IsDeviceLocalAccountMarkedForRemoval(
        const AccountId& account_id) const override;
    void DemoAccountLoggedIn() override {}
    void KioskAppLoggedIn(user_manager::User* user) override {}
    void ArcKioskAppLoggedIn(user_manager::User* user) override {}
    void PublicAccountUserLoggedIn(user_manager::User* user) override {}
    void SupervisedUserLoggedIn(const AccountId& account_id) override {}
    void OnUserRemoved(const AccountId& account_id) override {}
  
   protected:
    user_manager::User* primary_user_;
  
    // 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_manager::User* GetActiveUserInternal() const;
  
    // stub, always empty.
    AccountId owner_account_id_ = EmptyAccountId();
  
    // stub. Always empty.
    gfx::ImageSkia empty_image_;
  
    DISALLOW_COPY_AND_ASSIGN(FakeUserManager);
  };
  
  }  // namespace user_manager
  
  #endif  // COMPONENTS_USER_MANAGER_FAKE_USER_MANAGER_H_
  