OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/base/test/ui_controls.h" | 5 #include "ui/base/test/ui_controls.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 #include <mach/mach_time.h> | 8 #include <mach/mach_time.h> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 212 } |
213 | 213 |
214 // Returns the NSWindow located at |g_mouse_location|. NULL if there is no | 214 // Returns the NSWindow located at |g_mouse_location|. NULL if there is no |
215 // window there, or if the window located there is not owned by the application. | 215 // window there, or if the window located there is not owned by the application. |
216 // On Mac, unless dragging, mouse events are sent to the window under the | 216 // On Mac, unless dragging, mouse events are sent to the window under the |
217 // cursor. Note that the OS will ignore transparent windows and windows that | 217 // cursor. Note that the OS will ignore transparent windows and windows that |
218 // explicitly ignore mouse events. | 218 // explicitly ignore mouse events. |
219 NSWindow* WindowAtCurrentMouseLocation() { | 219 NSWindow* WindowAtCurrentMouseLocation() { |
220 NSInteger window_number = [NSWindow windowNumberAtPoint:g_mouse_location | 220 NSInteger window_number = [NSWindow windowNumberAtPoint:g_mouse_location |
221 belowWindowWithWindowNumber:0]; | 221 belowWindowWithWindowNumber:0]; |
222 return | 222 NSWindow* window = |
223 [[NSApplication sharedApplication] windowWithWindowNumber:window_number]; | 223 [[NSApplication sharedApplication] windowWithWindowNumber:window_number]; |
| 224 if (window) |
| 225 return window; |
| 226 |
| 227 // It's possible for a window owned by another application to be at that |
| 228 // location. Cocoa won't provide an NSWindow* for those. Tests should not care |
| 229 // about other applications, and raising windows in a headless application is |
| 230 // flaky due to OS restrictions. For tests, hunt through all of this |
| 231 // application's windows, top to bottom, looking for a good candidate. |
| 232 NSArray* window_list = [[NSApplication sharedApplication] orderedWindows]; |
| 233 for (window in window_list) { |
| 234 // Note this skips the extra checks (e.g. fully-transparent windows), that |
| 235 // +[NSWindow windowNumberAtPoint:] performs. Tests that care about that |
| 236 // should check separately (the goal here is to minimize flakiness). |
| 237 if (NSPointInRect(g_mouse_location, [window frame])) |
| 238 return window; |
| 239 } |
| 240 |
| 241 // Note that -[NSApplication orderedWindows] won't include NSPanels. If a test |
| 242 // uses those, it will need to handle that itself. |
| 243 return nil; |
224 } | 244 } |
225 | 245 |
226 } // namespace | 246 } // namespace |
227 | 247 |
228 namespace ui_controls { | 248 namespace ui_controls { |
229 | 249 |
230 void EnableUIControls() { | 250 void EnableUIControls() { |
231 g_ui_controls_enabled = true; | 251 g_ui_controls_enabled = true; |
232 } | 252 } |
233 | 253 |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 void RunClosureAfterAllPendingUIEvents(const base::Closure& closure) { | 407 void RunClosureAfterAllPendingUIEvents(const base::Closure& closure) { |
388 base::MessageLoop::current()->PostTask( | 408 base::MessageLoop::current()->PostTask( |
389 FROM_HERE, base::Bind(&EventQueueWatcher, closure)); | 409 FROM_HERE, base::Bind(&EventQueueWatcher, closure)); |
390 } | 410 } |
391 | 411 |
392 bool IsFullKeyboardAccessEnabled() { | 412 bool IsFullKeyboardAccessEnabled() { |
393 return [NSApp isFullKeyboardAccessEnabled]; | 413 return [NSApp isFullKeyboardAccessEnabled]; |
394 } | 414 } |
395 | 415 |
396 } // namespace ui_controls | 416 } // namespace ui_controls |
OLD | NEW |