Chromium Code Reviews| Index: ui/views/test/event_generator_delegate_mac.mm |
| diff --git a/ui/views/test/event_generator_delegate_mac.mm b/ui/views/test/event_generator_delegate_mac.mm |
| index 55005ea2c4647103ab53c465a2105e3f0cd20934..d96246a90e1ce9c7b82678ed5856ea75520c2f64 100644 |
| --- a/ui/views/test/event_generator_delegate_mac.mm |
| +++ b/ui/views/test/event_generator_delegate_mac.mm |
| @@ -172,12 +172,10 @@ void EmulateSendEvent(NSWindow* window, NSEvent* event) { |
| [responder scrollWheel:event]; |
| break; |
| case NSMouseEntered: |
| + [responder mouseEntered:event]; |
|
tapted
2016/10/26 00:57:00
EventGenerator is for cross-platform testing of vi
snake
2016/10/26 12:44:56
Yes, this needs for testing MouseEnter/Exit evenet
|
| + break; |
| case NSMouseExited: |
| - // With the assumptions in NSMouseMoved, it doesn't make sense for the |
| - // generator to handle entered/exited separately. It's the responsibility |
| - // of views::internal::RootView to convert the moved events into entered |
| - // and exited events for the individual views. |
| - NOTREACHED(); |
| + [responder mouseExited:event]; |
| break; |
| case NSEventTypeSwipe: |
| // NSEventTypeSwipe events can't be generated using public interfaces on |
| @@ -206,15 +204,38 @@ void EmulateSendEvent(NSWindow* window, NSEvent* event) { |
| NSPoint point = ConvertRootPointToTarget(window, point_in_root); |
| NSUInteger modifiers = 0; |
| NSEventType type = EventTypeToNative(event_type, flags, &modifiers); |
| - return [NSEvent mouseEventWithType:type |
| - location:point |
| - modifierFlags:modifiers |
| - timestamp:0 |
| - windowNumber:[window windowNumber] |
| - context:nil |
| - eventNumber:0 |
| - clickCount:click_count |
| - pressure:1.0]; |
| + if (type == NSMouseEntered || type == NSMouseExited) { |
| + return [NSEvent enterExitEventWithType:type |
| + location:point |
| + modifierFlags:modifiers |
| + timestamp:0 |
| + windowNumber:[window windowNumber] |
| + context:nil |
| + eventNumber:0 |
| + trackingNumber:0 |
| + userData:nil]; |
| + } else { |
| + return [NSEvent mouseEventWithType:type |
| + location:point |
| + modifierFlags:modifiers |
| + timestamp:0 |
| + windowNumber:[window windowNumber] |
| + context:nil |
| + eventNumber:0 |
| + clickCount:click_count |
| + pressure:1.0]; |
| + } |
| +} |
| + |
| +NSEvent* CreateMouseWheelEventInWindow(NSWindow* window, |
| + ui::MouseEvent* mouse_event) { |
| + DCHECK(mouse_event->type() == ui::ET_MOUSEWHEEL); |
| + ui::MouseWheelEvent* mouse_wheel_event = |
| + static_cast<ui::MouseWheelEvent*>(mouse_event); |
| + return cocoa_test_event_utils::TestScrollEvent( |
| + ConvertRootPointToTarget(window, mouse_wheel_event->location()), window, |
| + mouse_wheel_event->x_offset(), mouse_wheel_event->y_offset(), false, |
| + NSEventPhaseNone, NSEventPhaseNone); |
| } |
| // Implementation of ui::test::EventGeneratorDelegate for Mac. Everything |
| @@ -349,10 +370,12 @@ void DispatchKeyEventToIME(EventTarget* target, |
| } |
| void EventGeneratorDelegateMac::OnMouseEvent(ui::MouseEvent* event) { |
| - NSEvent* ns_event = CreateMouseEventInWindow(window_, |
| - event->type(), |
| - event->location(), |
| - event->changed_button_flags()); |
| + NSEvent* ns_event = |
| + event->type() == ui::ET_MOUSEWHEEL |
| + ? CreateMouseWheelEventInWindow(window_, event) |
| + : CreateMouseEventInWindow(window_, event->type(), event->location(), |
| + event->changed_button_flags()); |
| + |
| if (owner_->targeting_application()) |
| [NSApp sendEvent:ns_event]; |
| else |