Index: remoting/host/event_executor_win.cc |
diff --git a/remoting/host/event_executor_win.cc b/remoting/host/event_executor_win.cc |
index 007f31bd07a2a9040c539bb98ec8d7e29e835785..430266a73177666039c9512ddbf3c8adcd11d8ae 100644 |
--- a/remoting/host/event_executor_win.cc |
+++ b/remoting/host/event_executor_win.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/compiler_specific.h" |
#include "base/message_loop.h" |
+#include "base/message_loop_proxy.h" |
#include "remoting/host/capturer.h" |
#include "remoting/host/clipboard.h" |
#include "remoting/proto/event.pb.h" |
@@ -30,7 +31,9 @@ using protocol::MouseEvent; |
// A class to generate events on Windows. |
class EventExecutorWin : public EventExecutor { |
public: |
- EventExecutorWin(MessageLoop* message_loop, Capturer* capturer); |
+ EventExecutorWin(MessageLoop* message_loop, |
+ base::MessageLoopProxy* ui_loop, |
+ Capturer* capturer); |
virtual ~EventExecutorWin() {} |
// ClipboardStub interface. |
@@ -48,10 +51,9 @@ class EventExecutorWin : public EventExecutor { |
HKL GetForegroundKeyboardLayout(); |
void HandleKey(const KeyEvent& event); |
void HandleMouse(const MouseEvent& event); |
- void HandleSessionStarted(); |
- void HandleSessionFinished(); |
MessageLoop* message_loop_; |
+ base::MessageLoopProxy* ui_loop_; |
Capturer* capturer_; |
scoped_ptr<Clipboard> clipboard_; |
@@ -59,15 +61,17 @@ class EventExecutorWin : public EventExecutor { |
}; |
EventExecutorWin::EventExecutorWin(MessageLoop* message_loop, |
+ base::MessageLoopProxy* ui_loop, |
Capturer* capturer) |
: message_loop_(message_loop), |
+ ui_loop_(ui_loop), |
capturer_(capturer), |
clipboard_(Clipboard::Create()) { |
} |
void EventExecutorWin::InjectClipboardEvent(const ClipboardEvent& event) { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
+ if (!ui_loop_->BelongsToCurrentThread()) { |
+ ui_loop_->PostTask( |
FROM_HERE, |
base::Bind(&EventExecutorWin::InjectClipboardEvent, |
base::Unretained(this), |
@@ -103,27 +107,27 @@ void EventExecutorWin::InjectMouseEvent(const MouseEvent& event) { |
} |
void EventExecutorWin::OnSessionStarted() { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
+ if (!ui_loop_->BelongsToCurrentThread()) { |
+ ui_loop_->PostTask( |
FROM_HERE, |
base::Bind(&EventExecutorWin::OnSessionStarted, |
base::Unretained(this))); |
return; |
} |
- HandleSessionStarted(); |
+ clipboard_->Start(); |
} |
void EventExecutorWin::OnSessionFinished() { |
- if (MessageLoop::current() != message_loop_) { |
- message_loop_->PostTask( |
+ if (!ui_loop_->BelongsToCurrentThread()) { |
+ ui_loop_->PostTask( |
FROM_HERE, |
base::Bind(&EventExecutorWin::OnSessionFinished, |
base::Unretained(this))); |
return; |
} |
- HandleSessionFinished(); |
+ clipboard_->Stop(); |
} |
HKL EventExecutorWin::GetForegroundKeyboardLayout() { |
@@ -278,20 +282,13 @@ void EventExecutorWin::HandleMouse(const MouseEvent& event) { |
} |
} |
-void EventExecutorWin::HandleSessionStarted() { |
- clipboard_->Start(); |
-} |
- |
-void EventExecutorWin::HandleSessionFinished() { |
- clipboard_->Stop(); |
-} |
- |
} // namespace |
-scoped_ptr<EventExecutor> EventExecutor::Create( |
- MessageLoop* message_loop, Capturer* capturer) { |
+scoped_ptr<EventExecutor> EventExecutor::Create(MessageLoop* message_loop, |
+ base::MessageLoopProxy* ui_loop, |
+ Capturer* capturer) { |
return scoped_ptr<EventExecutor>( |
- new EventExecutorWin(message_loop, capturer)); |
+ new EventExecutorWin(message_loop, ui_loop, capturer)); |
} |
} // namespace remoting |