Index: remoting/host/local_input_monitor_mac.mm |
diff --git a/remoting/host/local_input_monitor_mac.mm b/remoting/host/local_input_monitor_mac.mm |
index 1231e4584518ff40999b6de3761bb054147721bf..f38489a937d57bfddb7d7935d851b23f05d216b5 100644 |
--- a/remoting/host/local_input_monitor_mac.mm |
+++ b/remoting/host/local_input_monitor_mac.mm |
@@ -15,7 +15,8 @@ |
#include "base/memory/ref_counted.h" |
#include "base/single_thread_task_runner.h" |
#include "base/synchronization/lock.h" |
-#include "remoting/host/mouse_move_observer.h" |
+#include "base/threading/non_thread_safe.h" |
+#include "remoting/host/client_session_control.h" |
#include "third_party/skia/include/core/SkPoint.h" |
#import "third_party/GTM/AppKit/GTMCarbonEvent.h" |
@@ -26,7 +27,8 @@ static const NSUInteger kEscKeyCode = 53; |
namespace remoting { |
namespace { |
-class LocalInputMonitorMac : public LocalInputMonitor { |
+class LocalInputMonitorMac : public base::NonThreadSafe, |
+ public LocalInputMonitor { |
public: |
// Invoked by LocalInputMonitorManager. |
class EventHandler { |
@@ -39,13 +41,10 @@ class LocalInputMonitorMac : public LocalInputMonitor { |
LocalInputMonitorMac( |
scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
+ base::WeakPtr<ClientSessionControl> client_session_control); |
virtual ~LocalInputMonitorMac(); |
- virtual void Start(MouseMoveObserver* mouse_move_observer, |
- const base::Closure& disconnect_callback) OVERRIDE; |
- virtual void Stop() OVERRIDE; |
- |
private: |
// The actual implementation resides in LocalInputMonitorMac::Core class. |
class Core; |
@@ -161,10 +160,10 @@ class LocalInputMonitorMac::Core |
public EventHandler { |
public: |
Core(scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
+ base::WeakPtr<ClientSessionControl> client_session_control); |
- void Start(MouseMoveObserver* mouse_move_observer, |
- const base::Closure& disconnect_callback); |
+ void Start(); |
void Stop(); |
private: |
@@ -186,54 +185,41 @@ class LocalInputMonitorMac::Core |
LocalInputMonitorManager* manager_; |
- // 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_; |
+ // Invoked in the |caller_task_runner_| thread to report local mouse events |
+ // and session disconnect requests. |
+ base::WeakPtr<ClientSessionControl> client_session_control_; |
DISALLOW_COPY_AND_ASSIGN(Core); |
}; |
LocalInputMonitorMac::LocalInputMonitorMac( |
scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) |
- : core_(new Core(caller_task_runner, ui_task_runner)) { |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
+ base::WeakPtr<ClientSessionControl> client_session_control) |
+ : core_(new Core(caller_task_runner, |
+ ui_task_runner, |
+ client_session_control)) { |
+ core_->Start(); |
} |
LocalInputMonitorMac::~LocalInputMonitorMac() { |
-} |
- |
-void LocalInputMonitorMac::Start(MouseMoveObserver* mouse_move_observer, |
- const base::Closure& disconnect_callback) { |
- core_->Start(mouse_move_observer, disconnect_callback); |
-} |
- |
-void LocalInputMonitorMac::Stop() { |
core_->Stop(); |
} |
LocalInputMonitorMac::Core::Core( |
scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
+ base::WeakPtr<ClientSessionControl> client_session_control) |
: caller_task_runner_(caller_task_runner), |
ui_task_runner_(ui_task_runner), |
manager_(nil), |
- mouse_move_observer_(NULL) { |
+ client_session_control_(client_session_control) { |
+ DCHECK(client_session_control_); |
} |
-void LocalInputMonitorMac::Core::Start( |
- MouseMoveObserver* mouse_move_observer, |
- const base::Closure& disconnect_callback) { |
+void LocalInputMonitorMac::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; |
ui_task_runner_->PostTask(FROM_HERE, |
base::Bind(&Core::StartOnUiThread, this)); |
} |
@@ -241,15 +227,11 @@ void LocalInputMonitorMac::Core::Start( |
void LocalInputMonitorMac::Core::Stop() { |
DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
- mouse_move_observer_ = NULL; |
- disconnect_callback_.Reset(); |
ui_task_runner_->PostTask(FROM_HERE, base::Bind(&Core::StopOnUiThread, this)); |
} |
LocalInputMonitorMac::Core::~Core() { |
DCHECK(manager_ == nil); |
- DCHECK(disconnect_callback_.is_null()); |
- DCHECK(!mouse_move_observer_); |
} |
void LocalInputMonitorMac::Core::StartOnUiThread() { |
@@ -267,25 +249,16 @@ void LocalInputMonitorMac::Core::StopOnUiThread() { |
} |
void LocalInputMonitorMac::Core::OnLocalMouseMoved(const SkIPoint& position) { |
- if (!caller_task_runner_->BelongsToCurrentThread()) { |
- caller_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&Core::OnLocalMouseMoved, this, position)); |
- return; |
- } |
- |
- if (mouse_move_observer_) |
- mouse_move_observer_->OnLocalMouseMoved(position); |
+ caller_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&ClientSessionControl::OnLocalMouseMoved, |
+ client_session_control_, |
+ position)); |
} |
void LocalInputMonitorMac::Core::OnDisconnectShortcut() { |
- if (!caller_task_runner_->BelongsToCurrentThread()) { |
- caller_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&Core::OnDisconnectShortcut, this)); |
- return; |
- } |
- |
- if (!disconnect_callback_.is_null()) |
- disconnect_callback_.Run(); |
+ caller_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&ClientSessionControl::DisconnectSession, |
+ client_session_control_)); |
} |
} // namespace |
@@ -293,9 +266,12 @@ void LocalInputMonitorMac::Core::OnDisconnectShortcut() { |
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, |
+ base::WeakPtr<ClientSessionControl> client_session_control) { |
return scoped_ptr<LocalInputMonitor>( |
- new LocalInputMonitorMac(caller_task_runner, ui_task_runner)); |
+ new LocalInputMonitorMac(caller_task_runner, |
+ ui_task_runner, |
+ client_session_control)); |
} |
} // namespace remoting |