#include "remoting/host/curtain_mode_chromeos.h"
#include <memory>
#include "ash/curtain/remote_maintenance_curtain_view.h"
#include "ash/curtain/security_curtain_controller.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/time.h"
#include "remoting/host/chromeos/ash_proxy.h"
#include "ui/views/view.h"
namespace remoting {
namespace {
using ash::curtain::SecurityCurtainController;
std::unique_ptr<views::View> CreateCurtainOverlay() {
return std::make_unique<ash::curtain::RemoteMaintenanceCurtainView>();
}
base::TimeDelta MuteAudioOutputDelay() {
if (AshProxy::Get().IsScreenReaderEnabled()) {
return base::Seconds(20);
}
return base::TimeDelta();
}
}
std::unique_ptr<CurtainMode> CurtainMode::Create(
scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
base::WeakPtr<ClientSessionControl> client_session_control) {
return std::make_unique<CurtainModeChromeOs>(ui_task_runner);
}
SecurityCurtainController::InitParams CurtainModeChromeOs::CreateInitParams() {
SecurityCurtainController::InitParams params{
base::BindRepeating(CreateCurtainOverlay),
};
params.mute_audio_output_after = MuteAudioOutputDelay();
params.mute_audio_input = true;
params.disable_camera_access = true;
return params;
}
CurtainModeChromeOs::CurtainModeChromeOs(
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
: core_(ui_task_runner) {}
CurtainModeChromeOs::~CurtainModeChromeOs() = default;
bool CurtainModeChromeOs::Activate() {
core_.AsyncCall(&Core::Activate);
return true;
}
CurtainModeChromeOs::Core::~Core() {
security_curtain_controller().Disable();
}
void CurtainModeChromeOs::Core::Activate() {
if (security_curtain_controller().IsEnabled()) {
security_curtain_controller().Disable();
}
security_curtain_controller().Enable(CreateInitParams());
}
SecurityCurtainController&
CurtainModeChromeOs::Core::security_curtain_controller() {
return AshProxy::Get().GetSecurityCurtainController();
}
}