Chromium Code Reviews| Index: remoting/host/local_input_monitor_linux.cc |
| diff --git a/remoting/host/local_input_monitor_linux.cc b/remoting/host/local_input_monitor_linux.cc |
| index 241b1b42cc21a26aa778bc842d20494749513e24..dd997d8a70bd42ad5009fef4b8a676a08cc7badc 100644 |
| --- a/remoting/host/local_input_monitor_linux.cc |
| +++ b/remoting/host/local_input_monitor_linux.cc |
| @@ -19,7 +19,7 @@ |
| #include "base/message_pump_libevent.h" |
| #include "base/posix/eintr_wrapper.h" |
| #include "base/single_thread_task_runner.h" |
| -#include "remoting/host/mouse_move_observer.h" |
| +#include "base/threading/non_thread_safe.h" |
| #include "third_party/skia/include/core/SkPoint.h" |
| // These includes need to be later than dictated by the style guide due to |
| @@ -32,17 +32,15 @@ namespace remoting { |
| namespace { |
| -class LocalInputMonitorLinux : public LocalInputMonitor { |
| +class LocalInputMonitorLinux : public base::NonThreadSafe, |
| + public LocalInputMonitor { |
| public: |
| LocalInputMonitorLinux( |
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner); |
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
| + SessionController::Delegate* delegate); |
| virtual ~LocalInputMonitorLinux(); |
| - virtual void Start(MouseMoveObserver* mouse_move_observer, |
| - const base::Closure& disconnect_callback) OVERRIDE; |
| - virtual void Stop() OVERRIDE; |
| - |
| private: |
| // The actual implementation resides in LocalInputMonitorLinux::Core class. |
| class Core |
| @@ -50,10 +48,10 @@ class LocalInputMonitorLinux : public LocalInputMonitor { |
| public base::MessagePumpLibevent::Watcher { |
| public: |
| Core(scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner); |
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
| + SessionController::Delegate* delegate); |
| - void Start(MouseMoveObserver* mouse_move_observer, |
| - const base::Closure& disconnect_callback); |
| + void Start(); |
| void Stop(); |
| private: |
| @@ -67,11 +65,12 @@ class LocalInputMonitorLinux : public LocalInputMonitor { |
| virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; |
| virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; |
| - // Posts OnLocalMouseMoved() notification to |mouse_move_observer_| on |
| + // Posts OnLocalMouseMoved() notification to |delegate_| on |
| // the |caller_task_runner_| thread. |
| void OnLocalMouseMoved(const SkIPoint& position); |
| - // Posts |disconnect_callback_| on the |caller_task_runner_| thread. |
| + // Posts DisconnectSession() call to |delegate_ on the |caller_task_runner_| |
|
Sergey Ulanov
2013/03/20 06:31:06
nit: missing |
alexeypa (please no reviews)
2013/03/20 17:05:29
Done.
|
| + // thread. |
| void OnDisconnectShortcut(); |
| // Processes key and mouse events. |
| @@ -85,12 +84,9 @@ class LocalInputMonitorLinux : public LocalInputMonitor { |
| // Task runner on which X Window events are received. |
| scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_; |
| - // Invoked in the |caller_task_runner_| thread to report local mouse events. |
| - MouseMoveObserver* mouse_move_observer_; |
| - |
| - // Posted to the |caller_task_runner_| thread every time the disconnect key |
| - // combination is pressed. |
| - base::Closure disconnect_callback_; |
| + // Points to the object receiving mouse event notifications and session |
| + // disconnect requests. |
| + SessionController::Delegate* delegate_; |
| // Used to receive base::MessagePumpLibevent::Watcher events. |
| base::MessagePumpLibevent::FileDescriptorWatcher controller_; |
| @@ -116,51 +112,38 @@ class LocalInputMonitorLinux : public LocalInputMonitor { |
| LocalInputMonitorLinux::LocalInputMonitorLinux( |
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner) |
| - : core_(new Core(caller_task_runner, input_task_runner)) { |
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
| + SessionController::Delegate* delegate) |
| + : core_(new Core(caller_task_runner, input_task_runner, delegate)) { |
| + core_->Start(); |
| } |
| LocalInputMonitorLinux::~LocalInputMonitorLinux() { |
| -} |
| - |
| -void LocalInputMonitorLinux::Start( |
| - MouseMoveObserver* mouse_move_observer, |
| - const base::Closure& disconnect_callback) { |
| - core_->Start(mouse_move_observer, disconnect_callback); |
| -} |
| - |
| -void LocalInputMonitorLinux::Stop() { |
| core_->Stop(); |
| } |
| LocalInputMonitorLinux::Core::Core( |
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner) |
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
| + SessionController::Delegate* delegate) |
| : caller_task_runner_(caller_task_runner), |
| input_task_runner_(input_task_runner), |
| - mouse_move_observer_(NULL), |
| + delegate_(delegate), |
| alt_pressed_(false), |
| ctrl_pressed_(false), |
| display_(NULL), |
| x_record_display_(NULL), |
| x_record_context_(0) { |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| + DCHECK(delegate_); |
| x_record_range_[0] = NULL; |
| x_record_range_[1] = NULL; |
| } |
| -void LocalInputMonitorLinux::Core::Start( |
| - MouseMoveObserver* mouse_move_observer, |
| - const base::Closure& disconnect_callback) { |
| +void LocalInputMonitorLinux::Core::Start() { |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| - DCHECK(disconnect_callback_.is_null()); |
| - DCHECK(!disconnect_callback.is_null()); |
| - DCHECK(!mouse_move_observer_); |
| - DCHECK(mouse_move_observer); |
| - disconnect_callback_ = disconnect_callback; |
| - mouse_move_observer_ = mouse_move_observer; |
| input_task_runner_->PostTask(FROM_HERE, |
| base::Bind(&Core::StartOnInputThread, this)); |
| } |
| @@ -168,15 +151,13 @@ void LocalInputMonitorLinux::Core::Start( |
| void LocalInputMonitorLinux::Core::Stop() { |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| - disconnect_callback_.Reset(); |
| - mouse_move_observer_ = NULL; |
| + delegate_ = NULL; |
| input_task_runner_->PostTask(FROM_HERE, |
| base::Bind(&Core::StopOnInputThread, this)); |
| } |
| LocalInputMonitorLinux::Core::~Core() { |
| - DCHECK(disconnect_callback_.is_null()); |
| - DCHECK(!mouse_move_observer_); |
| + DCHECK(!delegate_); |
| DCHECK(!display_); |
| DCHECK(!x_record_display_); |
| DCHECK(!x_record_range_[0]); |
| @@ -310,8 +291,8 @@ void LocalInputMonitorLinux::Core::OnLocalMouseMoved(const SkIPoint& position) { |
| return; |
| } |
| - if (mouse_move_observer_) |
| - mouse_move_observer_->OnLocalMouseMoved(position); |
| + if (delegate_) |
| + delegate_->OnLocalMouseMoved(position); |
| } |
| void LocalInputMonitorLinux::Core::OnDisconnectShortcut() { |
| @@ -321,8 +302,8 @@ void LocalInputMonitorLinux::Core::OnDisconnectShortcut() { |
| return; |
| } |
| - if (!disconnect_callback_.is_null()) |
| - disconnect_callback_.Run(); |
| + if (delegate_) |
| + delegate_->DisconnectSession(); |
| } |
| void LocalInputMonitorLinux::Core::ProcessXEvent(xEvent* event) { |
| @@ -361,9 +342,12 @@ void LocalInputMonitorLinux::Core::ProcessReply(XPointer self, |
| scoped_ptr<LocalInputMonitor> LocalInputMonitor::Create( |
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
| - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { |
| + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
| + SessionController::Delegate* delegate) { |
| return scoped_ptr<LocalInputMonitor>( |
| - new LocalInputMonitorLinux(caller_task_runner, input_task_runner)); |
| + new LocalInputMonitorLinux(caller_task_runner, |
| + input_task_runner, |
| + delegate)); |
| } |
| } // namespace remoting |