summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--remoting/host/client_session.cc21
-rw-r--r--remoting/host/client_session.h9
-rw-r--r--remoting/host/mouse_clamping_filter.cc27
-rw-r--r--remoting/host/mouse_clamping_filter.h35
-rw-r--r--remoting/protocol/mouse_input_filter.h2
-rw-r--r--remoting/remoting.gyp2
6 files changed, 69 insertions, 27 deletions
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index 578fe75..4459000 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -29,8 +29,8 @@ ClientSession::ClientSession(
host_input_stub_(host_input_stub),
input_tracker_(host_input_stub_),
remote_input_filter_(&input_tracker_),
- mouse_input_filter_(&remote_input_filter_),
- disable_input_filter_(&mouse_input_filter_),
+ mouse_clamping_filter_(capturer, &remote_input_filter_),
+ disable_input_filter_(&mouse_clamping_filter_),
disable_clipboard_filter_(clipboard_echo_filter_.host_filter()),
auth_input_filter_(&disable_input_filter_),
auth_clipboard_filter_(&disable_clipboard_filter_),
@@ -44,7 +44,7 @@ ClientSession::ClientSession(
// later and set them only when connection is authenticated.
connection_->set_clipboard_stub(&auth_clipboard_filter_);
connection_->set_host_stub(this);
- connection_->set_input_stub(this);
+ connection_->set_input_stub(&auth_input_filter_);
clipboard_echo_filter_.set_host_stub(host_clipboard_stub_);
// |auth_*_filter_|'s states reflect whether the session is authenticated.
@@ -55,21 +55,6 @@ ClientSession::ClientSession(
ClientSession::~ClientSession() {
}
-void ClientSession::InjectKeyEvent(const protocol::KeyEvent& event) {
- DCHECK(CalledOnValidThread());
- auth_input_filter_.InjectKeyEvent(event);
-}
-
-void ClientSession::InjectMouseEvent(const protocol::MouseEvent& event) {
- DCHECK(CalledOnValidThread());
-
- // Ensure that the MouseInputFilter is clamping to the current dimensions.
- mouse_input_filter_.set_output_size(capturer_->size_most_recent());
- mouse_input_filter_.set_input_size(capturer_->size_most_recent());
-
- auth_input_filter_.InjectMouseEvent(event);
-}
-
void ClientSession::NotifyClientDimensions(
const protocol::ClientDimensions& dimensions) {
// TODO(wez): Use the dimensions, e.g. to resize the host desktop to match.
diff --git a/remoting/host/client_session.h b/remoting/host/client_session.h
index d1de45c..109e180 100644
--- a/remoting/host/client_session.h
+++ b/remoting/host/client_session.h
@@ -10,6 +10,7 @@
#include "base/time.h"
#include "base/timer.h"
#include "base/threading/non_thread_safe.h"
+#include "remoting/host/mouse_clamping_filter.h"
#include "remoting/host/remote_input_filter.h"
#include "remoting/protocol/clipboard_echo_filter.h"
#include "remoting/protocol/clipboard_filter.h"
@@ -19,7 +20,6 @@
#include "remoting/protocol/input_event_tracker.h"
#include "remoting/protocol/input_filter.h"
#include "remoting/protocol/input_stub.h"
-#include "remoting/protocol/mouse_input_filter.h"
#include "third_party/skia/include/core/SkPoint.h"
namespace remoting {
@@ -29,7 +29,6 @@ class VideoFrameCapturer;
// A ClientSession keeps a reference to a connection to a client, and maintains
// per-client state.
class ClientSession : public protocol::HostStub,
- public protocol::InputStub,
public protocol::ConnectionToClient::EventHandler,
public base::NonThreadSafe {
public:
@@ -74,10 +73,6 @@ class ClientSession : public protocol::HostStub,
const base::TimeDelta& max_duration);
virtual ~ClientSession();
- // protocol::InputStub interface.
- virtual void InjectKeyEvent(const protocol::KeyEvent& event) OVERRIDE;
- virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE;
-
// protocol::HostStub interface.
virtual void NotifyClientDimensions(
const protocol::ClientDimensions& dimensions) OVERRIDE;
@@ -145,7 +140,7 @@ class ClientSession : public protocol::HostStub,
RemoteInputFilter remote_input_filter_;
// Filter used to clamp mouse events to the current display dimensions.
- protocol::MouseInputFilter mouse_input_filter_;
+ MouseClampingFilter mouse_clamping_filter_;
// Filter to used to stop clipboard items sent from the client being echoed
// back to it.
diff --git a/remoting/host/mouse_clamping_filter.cc b/remoting/host/mouse_clamping_filter.cc
new file mode 100644
index 0000000..2d1a7ff
--- /dev/null
+++ b/remoting/host/mouse_clamping_filter.cc
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 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/mouse_clamping_filter.h"
+
+#include "remoting/host/video_frame_capturer.h"
+#include "remoting/proto/event.pb.h"
+
+namespace remoting {
+
+MouseClampingFilter::MouseClampingFilter(VideoFrameCapturer* capturer,
+ protocol::InputStub* input_stub)
+ : MouseInputFilter(input_stub), capturer_(capturer) {
+}
+
+MouseClampingFilter::~MouseClampingFilter() {
+}
+
+void MouseClampingFilter::InjectMouseEvent(const protocol::MouseEvent& event) {
+ // Ensure that the MouseInputFilter is clamping to the current dimensions.
+ set_output_size(capturer_->size_most_recent());
+ set_input_size(capturer_->size_most_recent());
+ MouseInputFilter::InjectMouseEvent(event);
+}
+
+} // namespace remoting
diff --git a/remoting/host/mouse_clamping_filter.h b/remoting/host/mouse_clamping_filter.h
new file mode 100644
index 0000000..02ff17a
--- /dev/null
+++ b/remoting/host/mouse_clamping_filter.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 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.
+
+#ifndef REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_
+#define REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_
+
+#include "base/compiler_specific.h"
+#include "remoting/protocol/mouse_input_filter.h"
+
+namespace remoting {
+
+class VideoFrameCapturer;
+
+// Filtering InputStub implementation which clamps mouse each mouse event to
+// the current dimensions of a VideoFrameCapturer instance before passing
+// them on to the target |input_stub|.
+class MouseClampingFilter : public protocol::MouseInputFilter {
+ public:
+ MouseClampingFilter(VideoFrameCapturer* capturer,
+ protocol::InputStub* input_stub);
+ virtual ~MouseClampingFilter();
+
+ // InputStub overrides.
+ virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE;
+
+ private:
+ VideoFrameCapturer* capturer_;
+
+ DISALLOW_COPY_AND_ASSIGN(MouseClampingFilter);
+};
+
+} // namespace remoting
+
+#endif // REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_
diff --git a/remoting/protocol/mouse_input_filter.h b/remoting/protocol/mouse_input_filter.h
index f4d24f7..f83af93 100644
--- a/remoting/protocol/mouse_input_filter.h
+++ b/remoting/protocol/mouse_input_filter.h
@@ -5,10 +5,8 @@
#ifndef REMOTING_PROTOCOL_MOUSE_INPUT_FILTER_H_
#define REMOTING_PROTOCOL_MOUSE_INPUT_FILTER_H_
-#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "remoting/protocol/input_filter.h"
-#include "remoting/protocol/input_stub.h"
#include "third_party/skia/include/core/SkTypes.h"
#include "third_party/skia/include/core/SkSize.h"
diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp
index 036d9ae..e5f3821 100644
--- a/remoting/remoting.gyp
+++ b/remoting/remoting.gyp
@@ -1258,6 +1258,8 @@
'host/local_input_monitor_win.cc',
'host/log_to_server.cc',
'host/log_to_server.h',
+ 'host/mouse_clamping_filter.cc',
+ 'host/mouse_clamping_filter.h',
'host/mouse_move_observer.h',
'host/network_settings.h',
'host/pin_hash.cc',