blob: d2cbadd7a6f1b0ce36afdbfac71072422901e118 [file] [log] [blame]
// Copyright 2013 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.
#include "remoting/host/continue_window.h"
#include "base/location.h"
#include "base/time/time.h"
#include "remoting/host/client_session_control.h"
// Minutes before the local user should confirm that the session should go on.
constexpr base::TimeDelta kSessionExpirationTimeout =
base::TimeDelta::FromMinutes(30);
// Minutes before the session will be disconnected (from the moment the Continue
// window has been shown).
constexpr base::TimeDelta kSessionDisconnectTimeout =
base::TimeDelta::FromMinutes(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;
// Hide the Continue window and resume the session.
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(protocol::MAX_SESSION_LENGTH);
}
void ContinueWindow::OnSessionExpired() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!client_session_control_)
return;
// Stop the remote input while the Continue window is shown.
client_session_control_->SetDisableInputs(true);
// Show the Continue window and wait for the local user input.
ShowUi();
disconnect_timer_.Start(FROM_HERE, kSessionDisconnectTimeout, this,
&ContinueWindow::DisconnectSession);
}
} // namespace remoting