Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1262)

Unified Diff: remoting/host/it2me_host_user_interface.cc

Issue 10384127: Chromoting: the Me2me host now presents a notification on the console allowing a user to disconnect… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/host/it2me_host_user_interface.cc
diff --git a/remoting/host/it2me_host_user_interface.cc b/remoting/host/it2me_host_user_interface.cc
index 758bafa0875458c0949511f84fcc5dc69cd130d8..c39f6d366d748c848fc9ca029d9d63df7edf4616 100644
--- a/remoting/host/it2me_host_user_interface.cc
+++ b/remoting/host/it2me_host_user_interface.cc
@@ -11,6 +11,17 @@
#include "remoting/host/disconnect_window.h"
#include "remoting/host/local_input_monitor.h"
+namespace {
+
+// Milliseconds before the continue window is shown.
+static const int kContinueWindowShowTimeoutMs = 10 * 60 * 1000;
+
+// Milliseconds before the continue window is automatically dismissed and
+// the connection is closed.
+static const int kContinueWindowHideTimeoutMs = 60 * 1000;
+
+} // namespace
+
namespace remoting {
class It2MeHostUserInterface::TimerTask {
@@ -27,151 +38,115 @@ class It2MeHostUserInterface::TimerTask {
};
-It2MeHostUserInterface::It2MeHostUserInterface(ChromotingHost* host,
- ChromotingHostContext* context)
- : host_(host),
- context_(context),
- is_monitoring_local_inputs_(false),
- ui_thread_proxy_(context->ui_message_loop()) {
+It2MeHostUserInterface::It2MeHostUserInterface(ChromotingHostContext* context)
+ : HostUserInterface(context) {
}
It2MeHostUserInterface::~It2MeHostUserInterface() {
-}
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
-void It2MeHostUserInterface::Init() {
- InitFrom(DisconnectWindow::Create(),
- ContinueWindow::Create(),
- LocalInputMonitor::Create());
+ ShowContinueWindow(false);
+ StartContinueWindowTimer(false);
}
-void It2MeHostUserInterface::InitFrom(
- scoped_ptr<DisconnectWindow> disconnect_window,
- scoped_ptr<ContinueWindow> continue_window,
- scoped_ptr<LocalInputMonitor> monitor) {
- disconnect_window_ = disconnect_window.Pass();
- continue_window_ = continue_window.Pass();
- local_input_monitor_ = monitor.Pass();
- host_->AddStatusObserver(this);
+void It2MeHostUserInterface::Start(ChromotingHost* host,
+ const base::Closure& disconnect_callback) {
+ DCHECK(network_message_loop()->BelongsToCurrentThread());
+
+ HostUserInterface::Start(host, disconnect_callback);
+ continue_window_ = ContinueWindow::Create();
}
void It2MeHostUserInterface::OnClientAuthenticated(const std::string& jid) {
- if (!authenticated_jid_.empty()) {
+ if (!get_authenticated_jid().empty()) {
// If we already authenticated another client then one of the
// connections may be an attacker, so both are suspect and we have
// to reject the second connection and shutdown the host.
- host_->RejectAuthenticatingClient();
- context_->network_message_loop()->PostTask(FROM_HERE, base::Bind(
- &ChromotingHost::Shutdown, host_, base::Closure()));
- return;
- }
-
- authenticated_jid_ = jid;
-
- std::string username = jid.substr(0, jid.find('/'));
- ui_thread_proxy_.PostTask(FROM_HERE, base::Bind(
- &It2MeHostUserInterface::ProcessOnClientAuthenticated,
- base::Unretained(this), username));
-}
-
-void It2MeHostUserInterface::OnClientDisconnected(const std::string& jid) {
- if (jid == authenticated_jid_) {
- ui_thread_proxy_.PostTask(FROM_HERE, base::Bind(
- &It2MeHostUserInterface::ProcessOnClientDisconnected,
- base::Unretained(this)));
+ get_host()->RejectAuthenticatingClient();
+ network_message_loop()->PostTask(FROM_HERE, base::Bind(
+ &ChromotingHost::Shutdown, get_host(), base::Closure()));
+ } else {
+ HostUserInterface::OnClientAuthenticated(jid);
}
}
-void It2MeHostUserInterface::OnAccessDenied(const std::string& jid) {
-}
-
-void It2MeHostUserInterface::OnShutdown() {
- // Host status observers must be removed on the network thread, so
- // it must happen here instead of in the destructor.
- host_->RemoveStatusObserver(this);
-}
-
-void It2MeHostUserInterface::Shutdown() {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
-
- MonitorLocalInputs(false);
- ShowDisconnectWindow(false, std::string());
- ShowContinueWindow(false);
- StartContinueWindowTimer(false);
-
- ui_thread_proxy_.Detach();
-}
-
void It2MeHostUserInterface::ProcessOnClientAuthenticated(
const std::string& username) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
- MonitorLocalInputs(true);
- ShowDisconnectWindow(true, username);
+ HostUserInterface::ProcessOnClientAuthenticated(username);
StartContinueWindowTimer(true);
}
void It2MeHostUserInterface::ProcessOnClientDisconnected() {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
- MonitorLocalInputs(false);
- ShowDisconnectWindow(false, std::string());
+ HostUserInterface::ProcessOnClientDisconnected();
ShowContinueWindow(false);
StartContinueWindowTimer(false);
}
-void It2MeHostUserInterface::MonitorLocalInputs(bool enable) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+void It2MeHostUserInterface::StartForTest(
+ ChromotingHost* host,
+ const base::Closure& disconnect_callback,
+ scoped_ptr<DisconnectWindow> disconnect_window,
+ scoped_ptr<ContinueWindow> continue_window,
+ scoped_ptr<LocalInputMonitor> local_input_monitor) {
+ HostUserInterface::StartForTest(host, disconnect_callback,
+ disconnect_window.Pass(),
+ local_input_monitor.Pass());
+ continue_window_ = continue_window.Pass();
+}
- if (enable == is_monitoring_local_inputs_)
- return;
- if (enable) {
- local_input_monitor_->Start(host_);
+void It2MeHostUserInterface::ContinueSession(bool continue_session) {
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
+
+ if (continue_session) {
+ get_host()->PauseSession(false);
+ timer_task_.reset();
+ StartContinueWindowTimer(true);
} else {
- local_input_monitor_->Stop();
+ DisconnectSession();
}
- is_monitoring_local_inputs_ = enable;
}
-void It2MeHostUserInterface::ShowDisconnectWindow(bool show,
- const std::string& username) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+void It2MeHostUserInterface::OnContinueWindowTimer() {
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
- if (show) {
- disconnect_window_->Show(host_, username);
- } else {
- disconnect_window_->Hide();
- }
+ get_host()->PauseSession(true);
+ ShowContinueWindow(true);
+
+ timer_task_.reset(new TimerTask(
+ ui_message_loop(),
+ base::Bind(&It2MeHostUserInterface::OnShutdownHostTimer,
+ base::Unretained(this)),
+ kContinueWindowHideTimeoutMs));
+}
+
+void It2MeHostUserInterface::OnShutdownHostTimer() {
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
+
+ ShowContinueWindow(false);
+ DisconnectSession();
}
void It2MeHostUserInterface::ShowContinueWindow(bool show) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
if (show) {
- continue_window_->Show(host_, base::Bind(
+ continue_window_->Show(get_host(), base::Bind(
&It2MeHostUserInterface::ContinueSession, base::Unretained(this)));
} else {
continue_window_->Hide();
}
}
-void It2MeHostUserInterface::ContinueSession(bool continue_session) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
-
- if (continue_session) {
- host_->PauseSession(false);
- timer_task_.reset();
- StartContinueWindowTimer(true);
- } else {
- host_->Shutdown(base::Closure());
- }
-}
-
void It2MeHostUserInterface::StartContinueWindowTimer(bool start) {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
+ DCHECK(ui_message_loop()->BelongsToCurrentThread());
if (start) {
timer_task_.reset(new TimerTask(
- context_->ui_message_loop(),
+ ui_message_loop(),
base::Bind(&It2MeHostUserInterface::OnContinueWindowTimer,
base::Unretained(this)),
kContinueWindowShowTimeoutMs));
@@ -180,24 +155,4 @@ void It2MeHostUserInterface::StartContinueWindowTimer(bool start) {
}
}
-void It2MeHostUserInterface::OnContinueWindowTimer() {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
-
- host_->PauseSession(true);
- ShowContinueWindow(true);
-
- timer_task_.reset(new TimerTask(
- context_->ui_message_loop(),
- base::Bind(&It2MeHostUserInterface::OnShutdownHostTimer,
- base::Unretained(this)),
- kContinueWindowHideTimeoutMs));
-}
-
-void It2MeHostUserInterface::OnShutdownHostTimer() {
- DCHECK(context_->ui_message_loop()->BelongsToCurrentThread());
-
- ShowContinueWindow(false);
- host_->Shutdown(base::Closure());
-}
-
} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698