#ifndef ASH_SESSION_TEST_SESSION_CONTROLLER_CLIENT_H_
#define ASH_SESSION_TEST_SESSION_CONTROLLER_CLIENT_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "ash/public/cpp/session/session_controller_client.h"
#include "ash/public/cpp/session/session_types.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/token.h"
#include "components/user_manager/user_type.h"
namespace views {
class Widget;
}
class AccountId;
class PrefService;
namespace ash {
enum class AddUserSessionPolicy;
class SessionControllerImpl;
class TestPrefServiceProvider;
class TestSessionControllerClient : public SessionControllerClient {
public:
TestSessionControllerClient(SessionControllerImpl* controller,
TestPrefServiceProvider* prefs_provider);
TestSessionControllerClient(const TestSessionControllerClient&) = delete;
TestSessionControllerClient& operator=(const TestSessionControllerClient&) =
delete;
~TestSessionControllerClient() override;
static void DisableAutomaticallyProvideSigninPref();
void InitializeAndSetClient();
void Reset();
void set_use_lower_case_user_id(bool value) {
use_lower_case_user_id_ = value;
}
int attempt_restart_chrome_count() const {
return attempt_restart_chrome_count_;
}
int request_hide_lock_screen_count() const {
return request_hide_lock_screen_count_;
}
int request_sign_out_count() const { return request_sign_out_count_; }
int request_restart_for_update_count() const {
return request_restart_for_update_count_;
}
void SetCanLockScreen(bool can_lock);
void SetShouldLockScreenAutomatically(bool should_lock);
void SetAddUserSessionPolicy(AddUserSessionPolicy policy);
void SetSessionState(session_manager::SessionState state);
void SetIsRunningInAppMode(bool app_mode);
void SetIsDemoSession();
void CreatePredefinedUserSessions(int count);
void AddUserSession(
const std::string& display_email,
user_manager::UserType user_type = user_manager::USER_TYPE_REGULAR,
bool provide_pref_service = true,
bool is_new_profile = false,
const std::string& given_name = std::string());
void AddUserSession(
const AccountId& account_id,
const std::string& display_email,
user_manager::UserType user_type = user_manager::USER_TYPE_REGULAR,
bool provide_pref_service = true,
bool is_new_profile = false,
const std::string& given_name = std::string());
void ProvidePrefServiceForUser(const AccountId& account_id);
void LockScreen();
virtual void UnlockScreen();
void FlushForTest();
void SetSigninScreenPrefService(std::unique_ptr<PrefService> pref_service);
void SetUserPrefService(const AccountId& account_id,
std::unique_ptr<PrefService> pref_service);
void RequestLockScreen() override;
void RequestHideLockScreen() override;
void RequestSignOut() override;
void RequestRestartForUpdate() override;
void AttemptRestartChrome() override;
void SwitchActiveUser(const AccountId& account_id) override;
void CycleActiveUser(CycleUserDirection direction) override;
void ShowMultiProfileLogin() override;
void EmitAshInitialized() override;
PrefService* GetSigninScreenPrefService() override;
PrefService* GetUserPrefService(const AccountId& account_id) override;
bool IsEnterpriseManaged() const override;
absl::optional<int> GetExistingUsersCount() const override;
void set_show_lock_screen_views(bool should_show) {
should_show_lock_screen_ = should_show;
}
void set_is_enterprise_managed(bool is_enterprise_managed) {
is_enterprise_managed_ = is_enterprise_managed;
}
void set_existing_users_count(int existing_users_count) {
existing_users_count_ = existing_users_count;
}
private:
void DoSwitchUser(const AccountId& account_id, bool switch_user);
const raw_ptr<SessionControllerImpl, DanglingUntriaged | ExperimentalAsh>
controller_;
const raw_ptr<TestPrefServiceProvider, ExperimentalAsh> prefs_provider_;
int fake_session_id_ = 0;
SessionInfo session_info_;
bool use_lower_case_user_id_ = true;
int request_hide_lock_screen_count_ = 0;
int request_sign_out_count_ = 0;
int request_restart_for_update_count_ = 0;
int attempt_restart_chrome_count_ = 0;
bool should_show_lock_screen_ = false;
bool is_enterprise_managed_ = false;
int existing_users_count_ = 0;
std::unique_ptr<views::Widget> multi_profile_login_widget_;
base::WeakPtrFactory<TestSessionControllerClient> weak_ptr_factory_{this};
};
}
#endif