summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-21 23:46:57 +0000
committerlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-21 23:46:57 +0000
commit825c4281c36b790e25a9f1f74fb9bd75a0d2ba42 (patch)
tree4924d9a9098dd19a238078d68472e1778bb04178
parent3fd22d99af8d466699b3078a72e15446b5bcbfe6 (diff)
downloadchromium_src-825c4281c36b790e25a9f1f74fb9bd75a0d2ba42.zip
chromium_src-825c4281c36b790e25a9f1f74fb9bd75a0d2ba42.tar.gz
chromium_src-825c4281c36b790e25a9f1f74fb9bd75a0d2ba42.tar.bz2
Use AutoTaskRunner to run tasks automatically, even if validation checks fail.
BUG=None TEST=Send invalid key/mouse event, verify host continues to process inputs. Review URL: http://codereview.chromium.org/6882121 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82583 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--remoting/host/event_executor_linux.cc18
-rw-r--r--remoting/host/event_executor_mac.cc10
-rw-r--r--remoting/host/event_executor_win.cc16
-rw-r--r--remoting/host/screen_recorder.cc28
-rw-r--r--remoting/host/screen_recorder.h1
5 files changed, 32 insertions, 41 deletions
diff --git a/remoting/host/event_executor_linux.cc b/remoting/host/event_executor_linux.cc
index efbdcd9..5f0ef92 100644
--- a/remoting/host/event_executor_linux.cc
+++ b/remoting/host/event_executor_linux.cc
@@ -14,6 +14,7 @@
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/task.h"
+#include "media/base/callback.h"
#include "remoting/proto/internal.pb.h"
namespace remoting {
@@ -277,13 +278,16 @@ bool EventExecutorLinux::Init() {
}
void EventExecutorLinux::InjectKeyEvent(const KeyEvent* event, Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
if (MessageLoop::current() != message_loop_) {
message_loop_->PostTask(
FROM_HERE,
NewRunnableMethod(this, &EventExecutorLinux::InjectKeyEvent,
- event, done));
+ event, done_runner.release()));
return;
}
+
// TODO(ajwong): This will only work for QWERTY keyboards.
int keysym = ChromotocolKeycodeToX11Keysym(event->keycode());
@@ -304,20 +308,20 @@ void EventExecutorLinux::InjectKeyEvent(const KeyEvent* event, Task* done) {
<< " sending keysym: " << keysym
<< " to keycode: " << keycode;
XTestFakeKeyEvent(display_, keycode, event->pressed(), CurrentTime);
-
- done->Run();
- delete done;
}
void EventExecutorLinux::InjectMouseEvent(const MouseEvent* event,
Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
if (MessageLoop::current() != message_loop_) {
message_loop_->PostTask(
FROM_HERE,
NewRunnableMethod(this, &EventExecutorLinux::InjectMouseEvent,
- event, done));
+ event, done_runner.release()));
return;
}
+
if (event->has_x() && event->has_y()) {
if (event->x() < 0 || event->y() < 0 ||
event->x() > width_ || event->y() > height_) {
@@ -352,9 +356,6 @@ void EventExecutorLinux::InjectMouseEvent(const MouseEvent* event,
if (event->has_wheel_offset_x() && event->has_wheel_offset_y()) {
NOTIMPLEMENTED() << "No scroll wheel support yet.";
}
-
- done->Run();
- delete done;
}
} // namespace
@@ -367,4 +368,3 @@ EventExecutor* EventExecutor::Create(MessageLoopForUI* message_loop,
} // namespace remoting
DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::EventExecutorLinux);
-
diff --git a/remoting/host/event_executor_mac.cc b/remoting/host/event_executor_mac.cc
index e38f514..96c8b01 100644
--- a/remoting/host/event_executor_mac.cc
+++ b/remoting/host/event_executor_mac.cc
@@ -12,6 +12,7 @@
#include "base/mac/scoped_cftyperef.h"
#include "base/message_loop.h"
#include "base/task.h"
+#include "media/base/callback.h"
#include "remoting/host/capturer.h"
#include "remoting/proto/internal.pb.h"
#include "remoting/protocol/message_decoder.h"
@@ -214,6 +215,8 @@ const int kUsVkeyToKeysym[256] = {
};
void EventExecutorMac::InjectKeyEvent(const KeyEvent* event, Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
int key_code = event->keycode();
if (key_code >= 0 && key_code < 256) {
int key_sym = kUsVkeyToKeysym[key_code];
@@ -245,11 +248,11 @@ void EventExecutorMac::InjectKeyEvent(const KeyEvent* event, Task* done) {
CGEventPost(kCGSessionEventTap, kbd_event);
}
}
- done->Run();
- delete done;
}
void EventExecutorMac::InjectMouseEvent(const MouseEvent* event, Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
if (event->has_x() && event->has_y()) {
// TODO(wez): Checking the validity of the MouseEvent should be done in core
// cross-platform code, not here!
@@ -301,9 +304,6 @@ void EventExecutorMac::InjectMouseEvent(const MouseEvent* event, Task* done) {
// CGEventCreateScrollWheelEvent() to inject scroll events.
NOTIMPLEMENTED() << "No scroll wheel support yet.";
}
-
- done->Run();
- delete done;
}
} // namespace
diff --git a/remoting/host/event_executor_win.cc b/remoting/host/event_executor_win.cc
index 53c550a..2991ace 100644
--- a/remoting/host/event_executor_win.cc
+++ b/remoting/host/event_executor_win.cc
@@ -8,6 +8,7 @@
#include "base/compiler_specific.h"
#include "base/message_loop.h"
+#include "media/base/callback.h"
#include "remoting/host/capturer.h"
#include "remoting/proto/event.pb.h"
#include "ui/base/keycodes/keyboard_codes.h"
@@ -45,29 +46,31 @@ EventExecutorWin::EventExecutorWin(MessageLoopForUI* message_loop,
}
void EventExecutorWin::InjectKeyEvent(const KeyEvent* event, Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
if (MessageLoop::current() != message_loop_) {
message_loop_->PostTask(
FROM_HERE,
NewRunnableMethod(this, &EventExecutorWin::InjectKeyEvent,
- event, done));
+ event, done_runner.release()));
return;
}
+
HandleKey(event);
- done->Run();
- delete done;
}
void EventExecutorWin::InjectMouseEvent(const MouseEvent* event, Task* done) {
+ media::AutoTaskRunner done_runner(done);
+
if (MessageLoop::current() != message_loop_) {
message_loop_->PostTask(
FROM_HERE,
NewRunnableMethod(this, &EventExecutorWin::InjectMouseEvent,
- event, done));
+ event, done_runner.release()));
return;
}
+
HandleMouse(event);
- done->Run();
- delete done;
}
void EventExecutorWin::HandleKey(const KeyEvent* event) {
@@ -176,4 +179,3 @@ EventExecutor* EventExecutor::Create(MessageLoopForUI* message_loop,
} // namespace remoting
DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::EventExecutorWin);
-
diff --git a/remoting/host/screen_recorder.cc b/remoting/host/screen_recorder.cc
index f4730c1..2db2608 100644
--- a/remoting/host/screen_recorder.cc
+++ b/remoting/host/screen_recorder.cc
@@ -11,6 +11,7 @@
#include "base/stl_util-inl.h"
#include "base/task.h"
#include "base/time.h"
+#include "media/base/callback.h"
#include "remoting/base/capture_data.h"
#include "remoting/base/tracer.h"
#include "remoting/proto/control.pb.h"
@@ -136,35 +137,25 @@ void ScreenRecorder::DoStart() {
void ScreenRecorder::DoStop(Task* done_task) {
DCHECK_EQ(capture_loop_, MessageLoop::current());
+ media::AutoTaskRunner done_runner(done_task);
+
// We might have not started when we receive a stop command, simply run the
// task and then return.
- if (!is_recording_) {
- DoCompleteStop(done_task);
+ if (!is_recording_)
return;
- }
capture_timer_.Stop();
is_recording_ = false;
DCHECK_GE(recordings_, 0);
if (recordings_) {
- network_loop_->PostTask(
+ network_loop_->PostTask(
FROM_HERE,
NewTracedMethod(this,
- &ScreenRecorder::DoStopOnNetworkThread, done_task));
+ &ScreenRecorder::DoStopOnNetworkThread,
+ done_runner.release()));
return;
}
-
- DoCompleteStop(done_task);
-}
-
-void ScreenRecorder::DoCompleteStop(Task* done_task) {
- DCHECK_EQ(capture_loop_, MessageLoop::current());
-
- if (done_task) {
- done_task->Run();
- delete done_task;
- }
}
void ScreenRecorder::DoSetMaxRate(double max_rate) {
@@ -371,9 +362,8 @@ void ScreenRecorder::DoStopOnEncodeThread(Task* done_task) {
// When this method is being executed there are no more tasks on encode thread
// for this object. We can then post a task to capture thread to finish the
// stop sequence.
- capture_loop_->PostTask(
- FROM_HERE,
- NewTracedMethod(this, &ScreenRecorder::DoCompleteStop, done_task));
+ if (done_task)
+ capture_loop_->PostTask(FROM_HERE, done_task);
}
void ScreenRecorder::EncodedDataAvailableCallback(VideoPacket* packet) {
diff --git a/remoting/host/screen_recorder.h b/remoting/host/screen_recorder.h
index 79eacc7..ce3e5ce 100644
--- a/remoting/host/screen_recorder.h
+++ b/remoting/host/screen_recorder.h
@@ -113,7 +113,6 @@ class ScreenRecorder : public base::RefCountedThreadSafe<ScreenRecorder> {
void DoStart();
void DoStop(Task* done_task);
- void DoCompleteStop(Task* done_task);
void DoSetMaxRate(double max_rate);