#include "remoting/host/continue_window.h"
#include "base/location.h"
#include "base/time/time.h"
#include "remoting/host/client_session_control.h"
constexpr base::TimeDelta kSessionExpirationTimeout = base::Minutes(30);
constexpr base::TimeDelta kSessionDisconnectTimeout = base::Minutes(5);
namespace remoting {
ContinueWindow::ContinueWindow() = default;
ContinueWindow::~ContinueWindow() = default;
void ContinueWindow::Start(
const base::WeakPtr<ClientSessionControl>& client_session_control) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!client_session_control_);
DCHECK(client_session_control);
client_session_control_ = client_session_control;
session_expired_timer_.Start(FROM_HERE, kSessionExpirationTimeout, this,
&ContinueWindow::OnSessionExpired);
}
void ContinueWindow::ContinueSession() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
disconnect_timer_.Stop();
if (!client_session_control_) {
return;
}
HideUi();
client_session_control_->SetDisableInputs(false);
session_expired_timer_.Start(FROM_HERE, kSessionExpirationTimeout, this,
&ContinueWindow::OnSessionExpired);
}
void ContinueWindow::DisconnectSession() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
disconnect_timer_.Stop();
if (client_session_control_) {
client_session_control_->DisconnectSession(
ErrorCode::MAX_SESSION_LENGTH,
"Maximum session duration has been reached.", FROM_HERE);
}
}
void ContinueWindow::OnSessionExpired() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!client_session_control_) {
return;
}
client_session_control_->SetDisableInputs(true);
ShowUi();
disconnect_timer_.Start(FROM_HERE, kSessionDisconnectTimeout, this,
&ContinueWindow::DisconnectSession);
}
}