- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / host / continue_window.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "remoting/host/continue_window.h"
6
7 #include "base/location.h"
8 #include "remoting/host/client_session_control.h"
9
10 // Minutes before the local user should confirm that the session should go on.
11 const int kSessionExpirationTimeoutMinutes = 10;
12
13 // Minutes before the session will be disconnected (from the moment the Continue
14 // window has been shown).
15 const int kSessionDisconnectTimeoutMinutes = 1;
16
17 namespace remoting {
18
19 ContinueWindow::~ContinueWindow() {
20 }
21
22 void ContinueWindow::Start(
23     const base::WeakPtr<ClientSessionControl>& client_session_control) {
24   DCHECK(CalledOnValidThread());
25   DCHECK(!client_session_control_.get());
26   DCHECK(client_session_control.get());
27
28   client_session_control_ = client_session_control;
29
30   session_expired_timer_.Start(
31       FROM_HERE, base::TimeDelta::FromMinutes(kSessionExpirationTimeoutMinutes),
32       this, &ContinueWindow::OnSessionExpired);
33 }
34
35 void ContinueWindow::ContinueSession() {
36   DCHECK(CalledOnValidThread());
37
38   disconnect_timer_.Stop();
39
40   if (!client_session_control_.get())
41     return;
42
43   // Hide the Continue window and resume the session.
44   HideUi();
45   client_session_control_->SetDisableInputs(false);
46
47   session_expired_timer_.Start(
48       FROM_HERE, base::TimeDelta::FromMinutes(kSessionExpirationTimeoutMinutes),
49       this, &ContinueWindow::OnSessionExpired);
50 }
51
52 void ContinueWindow::DisconnectSession() {
53   DCHECK(CalledOnValidThread());
54
55   disconnect_timer_.Stop();
56   if (client_session_control_.get())
57     client_session_control_->DisconnectSession();
58 }
59
60 ContinueWindow::ContinueWindow() {
61 }
62
63 void ContinueWindow::OnSessionExpired() {
64   DCHECK(CalledOnValidThread());
65
66   if (!client_session_control_.get())
67     return;
68
69   // Stop the remote input while the Continue window is shown.
70   client_session_control_->SetDisableInputs(true);
71
72   // Show the Continue window and wait for the local user input.
73   ShowUi();
74   disconnect_timer_.Start(
75       FROM_HERE, base::TimeDelta::FromMinutes(kSessionDisconnectTimeoutMinutes),
76       this, &ContinueWindow::DisconnectSession);
77 }
78
79 }  // namespace remoting