1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2013 The Chromium Authors
// 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::Minutes(30);
// Minutes before the session will be disconnected (from the moment the Continue
// window has been shown).
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;
}
// 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(
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;
}
// 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
|