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..a0268c3e91d5c3faf0527b79c2f43e6c239b1165 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()); |
} |
// 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,8 +248,10 @@ 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; |
} |
@@ -291,8 +286,10 @@ 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; |
} |
@@ -347,8 +344,10 @@ 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; |
} |
@@ -361,7 +360,7 @@ void MoveMouseToCenterAndPress( |
NSView* view, |
MouseButton button, |
int state, |
- Task* task) { |
+ const base::Closure& task) { |
DCHECK(view); |
NSWindow* window = [view window]; |
DCHECK(window); |
@@ -377,7 +376,7 @@ void MoveMouseToCenterAndPress( |
center = NSMakePoint(center.x, [screen frame].size.height - center.y); |
SendMouseMoveNotifyWhenDone(center.x, center.y, |
- new ClickTask(button, state, task)); |
+ ClickTask(button, state, task)); |
csilv
2011/10/11 21:48:00
ClickTask(button, state, task) ->base::Bind(&ui_co
James Hawkins
2011/10/11 21:54:20
Done.
|
} |
} // ui_controls |