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..b2ce6ef9116b67c06380f3a2bb017f142f688a49 100644 |
--- a/remoting/host/local_input_monitor_mac.mm |
+++ b/remoting/host/local_input_monitor_mac.mm |
@@ -15,7 +15,7 @@ |
#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 "third_party/skia/include/core/SkPoint.h" |
#import "third_party/GTM/AppKit/GTMCarbonEvent.h" |
@@ -26,7 +26,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 +40,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, |
+ SessionController::Delegate* delegate); |
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 +159,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, |
+ SessionController::Delegate* delegate); |
- void Start(MouseMoveObserver* mouse_move_observer, |
- const base::Closure& disconnect_callback); |
+ void Start(); |
void Stop(); |
private: |
@@ -186,54 +184,39 @@ 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. |
+ SessionController::Delegate* delegate_; |
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, |
+ SessionController::Delegate* delegate) |
+ : core_(new Core(caller_task_runner, ui_task_runner, delegate)) { |
+ 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, |
+ SessionController::Delegate* delegate) |
: caller_task_runner_(caller_task_runner), |
ui_task_runner_(ui_task_runner), |
manager_(nil), |
- mouse_move_observer_(NULL) { |
+ delegate_(delegate) { |
+ DCHECK(delegate_); |
} |
-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 +224,13 @@ void LocalInputMonitorMac::Core::Start( |
void LocalInputMonitorMac::Core::Stop() { |
DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
- mouse_move_observer_ = NULL; |
- disconnect_callback_.Reset(); |
+ delegate_ = NULL; |
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_); |
+ DCHECK(!delegate_); |
} |
void LocalInputMonitorMac::Core::StartOnUiThread() { |
@@ -273,8 +254,8 @@ void LocalInputMonitorMac::Core::OnLocalMouseMoved(const SkIPoint& position) { |
return; |
} |
- if (mouse_move_observer_) |
- mouse_move_observer_->OnLocalMouseMoved(position); |
+ if (delegate_) |
+ delegate_->OnLocalMouseMoved(position); |
} |
void LocalInputMonitorMac::Core::OnDisconnectShortcut() { |
@@ -284,8 +265,8 @@ void LocalInputMonitorMac::Core::OnDisconnectShortcut() { |
return; |
} |
- if (!disconnect_callback_.is_null()) |
- disconnect_callback_.Run(); |
+ if (delegate_) |
+ delegate_->DisconnectSession(); |
} |
} // namespace |
@@ -293,9 +274,10 @@ 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, |
+ SessionController::Delegate* delegate) { |
return scoped_ptr<LocalInputMonitor>( |
- new LocalInputMonitorMac(caller_task_runner, ui_task_runner)); |
+ new LocalInputMonitorMac(caller_task_runner, ui_task_runner, delegate)); |
} |
} // namespace remoting |