Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Unified Diff: chrome/browser/automation/ui_controls_mac.mm

Issue 8212006: base::Bind: Cleanup in automation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Mac build fixes. Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/automation/ui_controls_mac.mm
diff --git a/chrome/browser/automation/ui_controls_mac.mm b/chrome/browser/automation/ui_controls_mac.mm
index 6e38ef7ac8d081a870e08e62b9c36d32c931471a..1ebf8874b3e7f566bb8d94935471ef77028e5e9b 100644
--- a/chrome/browser/automation/ui_controls_mac.mm
+++ b/chrome/browser/automation/ui_controls_mac.mm
@@ -8,6 +8,7 @@
#include <mach/mach_time.h>
#include <vector>
+#include "base/callback.h"
#include "base/message_loop.h"
#include "chrome/browser/automation/ui_controls_internal.h"
#include "content/browser/browser_thread.h"
@@ -187,29 +188,22 @@ void SynthesizeKeyEventsSequence(NSWindow* window,
}
}
-// A task class to watch for the event queue. The specific task will be fired
-// when there is no more event in the queue.
-class EventQueueWatcher : public Task {
- public:
- EventQueueWatcher(Task* task) : task_(task) {}
-
- virtual ~EventQueueWatcher() {}
-
- virtual void Run() {
- NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
- untilDate:nil
- inMode:NSDefaultRunLoopMode
- dequeue:NO];
- // If there is still event in the queue, then we need to check again.
- if (event)
- MessageLoop::current()->PostTask(FROM_HERE, new EventQueueWatcher(task_));
- else
- MessageLoop::current()->PostTask(FROM_HERE, task_);
+// A helper function to watch for the event queue. The specific task will be
+// fired when there is no more event in the queue.
+void EventQueueWatcher(const base::Closure& task) {
+ NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
+ untilDate:nil
+ inMode:NSDefaultRunLoopMode
+ dequeue:NO];
+ // If there is still event in the queue, then we need to check again.
+ if (event) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&EventQueueWatcher, task));
+ } else {
+ MessageLoop::current()->PostTask(FROM_HERE, task);
}
-
- private:
- Task* task_;
-};
+}
// Stores the current mouse location on the screen. So that we can use it
// when firing keyboard and mouse click events.
@@ -217,7 +211,6 @@ NSPoint g_mouse_location = { 0, 0 };
} // anonymous namespace
-
namespace ui_controls {
bool SendKeyPress(gfx::NativeWindow window,
@@ -228,7 +221,7 @@ bool SendKeyPress(gfx::NativeWindow window,
bool command) {
return SendKeyPressNotifyWhenDone(window, key,
control, shift, alt, command,
- NULL);
+ MessageLoop::QuitClosure());
awong 2011/10/12 08:20:03 Are we sure we want to change this to QuitClosure(
James Hawkins 2011/10/12 17:12:39 Oops. Done.
}
// Win and Linux implement a SendKeyPress() this as a
@@ -239,7 +232,7 @@ bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window,
bool shift,
bool alt,
bool command,
- Task* task) {
+ const base::Closure& task) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
std::vector<NSEvent*> events;
@@ -255,21 +248,23 @@ bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window,
iter != events.end(); ++iter)
[[NSApplication sharedApplication] sendEvent:*iter];
- if (task)
- MessageLoop::current()->PostTask(FROM_HERE, new EventQueueWatcher(task));
+ if (!task.is_null()) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&EventQueueWatcher, task));
+ }
return true;
}
bool SendMouseMove(long x, long y) {
- return SendMouseMoveNotifyWhenDone(x, y, NULL);
+ return SendMouseMoveNotifyWhenDone(x, y, base::Closure());
}
// Input position is in screen coordinates. However, NSMouseMoved
// events require them window-relative, so we adjust. We *DO* flip
// the coordinate space, so input events can be the same for all
// platforms. E.g. (0,0) is upper-left.
-bool SendMouseMoveNotifyWhenDone(long x, long y, Task* task) {
+bool SendMouseMoveNotifyWhenDone(long x, long y, const base::Closure& task) {
NSWindow* window = [[NSApplication sharedApplication] keyWindow];
CGFloat screenHeight =
[[[NSScreen screens] objectAtIndex:0] frame].size.height;
@@ -291,17 +286,20 @@ bool SendMouseMoveNotifyWhenDone(long x, long y, Task* task) {
pressure:0.0];
[[NSApplication sharedApplication] postEvent:event atStart:NO];
- if (task)
- MessageLoop::current()->PostTask(FROM_HERE, new EventQueueWatcher(task));
+ if (!task.is_null()) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&EventQueueWatcher, task));
+ }
return true;
}
bool SendMouseEvents(MouseButton type, int state) {
- return SendMouseEventsNotifyWhenDone(type, state, NULL);
+ return SendMouseEventsNotifyWhenDone(type, state, base::Closure());
}
-bool SendMouseEventsNotifyWhenDone(MouseButton type, int state, Task* task) {
+bool SendMouseEventsNotifyWhenDone(MouseButton type, int state,
+ const base::Closure& task) {
// On windows it appears state can be (UP|DOWN). It is unclear if
// that'll happen here but prepare for it just in case.
if (state == (UP|DOWN)) {
@@ -347,21 +345,23 @@ bool SendMouseEventsNotifyWhenDone(MouseButton type, int state, Task* task) {
pressure:(state == DOWN ? 1.0 : 0.0 )];
[[NSApplication sharedApplication] postEvent:event atStart:NO];
- if (task)
- MessageLoop::current()->PostTask(FROM_HERE, new EventQueueWatcher(task));
+ if (!task.is_null()) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&EventQueueWatcher, task));
+ }
return true;
}
bool SendMouseClick(MouseButton type) {
- return SendMouseEventsNotifyWhenDone(type, UP|DOWN, NULL);
+ return SendMouseEventsNotifyWhenDone(type, UP|DOWN, base::Closure());
}
void MoveMouseToCenterAndPress(
NSView* view,
MouseButton button,
int state,
- Task* task) {
+ const base::Closure& task) {
DCHECK(view);
NSWindow* window = [view window];
DCHECK(window);
@@ -376,8 +376,9 @@ void MoveMouseToCenterAndPress(
center = [window convertBaseToScreen:center];
center = NSMakePoint(center.x, [screen frame].size.height - center.y);
- SendMouseMoveNotifyWhenDone(center.x, center.y,
- new ClickTask(button, state, task));
+ SendMouseMoveNotifyWhenDone(
+ center.x, center.y,
+ base::Bind(&ui_controls::ClickTask, button, state, task));
}
} // ui_controls

Powered by Google App Engine
This is Rietveld 408576698