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

Unified Diff: components/test_runner/event_sender.cc

Issue 2093343002: Scale the emulated event in EventSender when use-zoom-for-dsf is enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Scale the emulated event in EventSender when use-zoom-for-dsf is enabled Created 4 years, 6 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
« no previous file with comments | « components/test_runner/event_sender.h ('k') | components/test_runner/test_runner.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/test_runner/event_sender.h ('k') | components/test_runner/test_runner.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698