Index: components/test_runner/event_sender.cc |
diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc |
index e2db37e3378dc4ea9ca5d5528ec45ecabc688421..504bbb4c7efe07029f9d740fb94bcdaffe009228 100644 |
--- a/components/test_runner/event_sender.cc |
+++ b/components/test_runner/event_sender.cc |
@@ -32,6 +32,7 @@ |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
#include "third_party/WebKit/public/web/WebPagePopup.h" |
#include "third_party/WebKit/public/web/WebView.h" |
+#include "ui/events/blink/blink_event_util.h" |
#include "ui/events/keycodes/dom/keycode_converter.h" |
#include "ui/events/keycodes/keyboard_codes.h" |
#include "v8/include/v8.h" |
@@ -1305,15 +1306,22 @@ void EventSender::SetContextMenuData(const WebContextMenuData& data) { |
void EventSender::DoDragDrop(const WebDragData& drag_data, |
WebDragOperationsMask mask) { |
- WebMouseEvent event; |
+ WebMouseEvent unscaled_event; |
InitMouseEvent(WebInputEvent::MouseDown, |
current_pointer_state_[kRawMousePointerId].pressed_button_, |
current_pointer_state_[kRawMousePointerId].current_buttons_, |
current_pointer_state_[kRawMousePointerId].last_pos_, |
GetCurrentEventTimeSec(), click_count_, |
- current_pointer_state_[kRawMousePointerId].modifiers_, &event); |
- WebPoint client_point(event.x, event.y); |
- WebPoint screen_point(event.globalX, event.globalY); |
+ current_pointer_state_[kRawMousePointerId].modifiers_, |
+ &unscaled_event); |
+ |
+ std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
+ const WebMouseEvent* event = |
+ scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) |
+ : &unscaled_event; |
+ |
+ WebPoint client_point(event->x, event->y); |
+ WebPoint screen_point(event->globalX, event->globalY); |
current_drag_data_ = drag_data; |
current_drag_effects_allowed_ = mask; |
current_drag_effect_ = view()->dragTargetDragEnter( |
@@ -2001,10 +2009,14 @@ void EventSender::BeginDragWithFiles(const std::vector<std::string>& files) { |
delegate()->RegisterIsolatedFileSystem(absolute_filenames)); |
current_drag_effects_allowed_ = blink::WebDragOperationCopy; |
+ const WebPoint& last_pos = |
+ current_pointer_state_[kRawMousePointerId].last_pos_; |
+ float scale = delegate()->GetWindowToViewportScale(); |
+ WebPoint scaled_last_pos(last_pos.x * scale, last_pos.y * scale); |
+ |
// Provide a drag source. |
view()->dragTargetDragEnter( |
- current_drag_data_, current_pointer_state_[kRawMousePointerId].last_pos_, |
- current_pointer_state_[kRawMousePointerId].last_pos_, |
+ current_drag_data_, scaled_last_pos, scaled_last_pos, |
current_drag_effects_allowed_, 0); |
// |is_drag_mode_| saves events and then replays them later. We don't |
// need/want that. |
@@ -2636,16 +2648,21 @@ void EventSender::InitPointerProperties(gin::Arguments* args, |
return; |
} |
-void EventSender::FinishDragAndDrop(const WebMouseEvent& e, |
- blink::WebDragOperation drag_effect) { |
- WebPoint client_point(e.x, e.y); |
- WebPoint screen_point(e.globalX, e.globalY); |
+void EventSender::FinishDragAndDrop(const WebMouseEvent& unscaled_event, |
+ blink::WebDragOperation drag_effect) { |
+ std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
+ const WebMouseEvent* event = |
+ scaled_event.get() ? static_cast<const WebMouseEvent*>(scaled_event.get()) |
+ : &unscaled_event; |
+ |
+ WebPoint client_point(event->x, event->y); |
+ WebPoint screen_point(event->globalX, event->globalY); |
current_drag_effect_ = drag_effect; |
if (current_drag_effect_) { |
// Specifically pass any keyboard modifiers to the drop method. This allows |
// tests to control the drop type (i.e. copy or move). |
view()->dragTargetDrop(current_drag_data_, client_point, screen_point, |
- e.modifiers); |
+ event->modifiers); |
} else { |
view()->dragTargetDragLeave(); |
} |
@@ -2655,37 +2672,49 @@ void EventSender::FinishDragAndDrop(const WebMouseEvent& e, |
current_drag_data_.reset(); |
} |
-void EventSender::DoDragAfterMouseUp(const WebMouseEvent& e) { |
- last_click_time_sec_ = e.timeStampSeconds; |
+void EventSender::DoDragAfterMouseUp(const WebMouseEvent& unscaled_event) { |
+ std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
+ const WebMouseEvent* event = |
+ scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) |
+ : &unscaled_event; |
+ |
+ last_click_time_sec_ = event->timeStampSeconds; |
last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_; |
// If we're in a drag operation, complete it. |
if (current_drag_data_.isNull()) |
return; |
- WebPoint client_point(e.x, e.y); |
- WebPoint screen_point(e.globalX, e.globalY); |
+ WebPoint client_point(event->x, event->y); |
+ WebPoint screen_point(event->globalX, event->globalY); |
blink::WebDragOperation drag_effect = view()->dragTargetDragOver( |
- client_point, screen_point, current_drag_effects_allowed_, e.modifiers); |
+ client_point, screen_point, current_drag_effects_allowed_, |
+ event->modifiers); |
// Bail if dragover caused cancellation. |
if (current_drag_data_.isNull()) |
return; |
- FinishDragAndDrop(e, drag_effect); |
+ FinishDragAndDrop(unscaled_event, drag_effect); |
} |
-void EventSender::DoDragAfterMouseMove(const WebMouseEvent& e) { |
+void EventSender::DoDragAfterMouseMove(const WebMouseEvent& unscaled_event) { |
if (current_pointer_state_[kRawMousePointerId].pressed_button_ == |
WebMouseEvent::ButtonNone || |
current_drag_data_.isNull()) { |
return; |
} |
- WebPoint client_point(e.x, e.y); |
- WebPoint screen_point(e.globalX, e.globalY); |
+ std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
+ const WebMouseEvent* event = |
+ scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) |
+ : &unscaled_event; |
+ |
+ WebPoint client_point(event->x, event->y); |
+ WebPoint screen_point(event->globalX, event->globalY); |
current_drag_effect_ = view()->dragTargetDragOver( |
- client_point, screen_point, current_drag_effects_allowed_, e.modifiers); |
+ client_point, screen_point, current_drag_effects_allowed_, |
+ event->modifiers); |
} |
void EventSender::ReplaySavedEvents() { |
@@ -2736,14 +2765,18 @@ void EventSender::ReplaySavedEvents() { |
} |
WebInputEventResult EventSender::HandleInputEventOnViewOrPopup( |
- const WebInputEvent& event) { |
- last_event_timestamp_ = event.timeStampSeconds; |
+ const WebInputEvent& unscaled_event) { |
+ std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
+ const WebInputEvent* event = |
+ scaled_event.get() ? scaled_event.get() : &unscaled_event; |
+ |
+ last_event_timestamp_ = event->timeStampSeconds; |
if (WebPagePopup* popup = view()->pagePopup()) { |
- if (!WebInputEvent::isKeyboardEventType(event.type)) |
- return popup->handleInputEvent(event); |
+ if (!WebInputEvent::isKeyboardEventType(event->type)) |
+ return popup->handleInputEvent(*event); |
} |
- return view()->handleInputEvent(event); |
+ return view()->handleInputEvent(*event); |
} |
void EventSender::SendGesturesForMouseWheelEvent( |
@@ -2819,4 +2852,11 @@ blink::WebView* EventSender::view() { |
return web_test_proxy_base_->web_view(); |
} |
+std::unique_ptr<WebInputEvent> EventSender::ScaleEvent( |
+ const WebInputEvent& event) { |
+ // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the event |
+ // does not have to be converted. |
+ return ui::ScaleWebInputEvent(event, delegate()->GetWindowToViewportScale()); |
+} |
+ |
} // namespace test_runner |