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

Side by Side Diff: components/test_runner/event_sender.cc

Issue 2036873002: Making EventSender talk to the right WebWidget (for OOPIF support). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Proper scaling and lifetime management of events. Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/test_runner/event_sender.h" 5 #include "components/test_runner/event_sender.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory>
10
9 #include "base/bind.h" 11 #include "base/bind.h"
10 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
11 #include "base/command_line.h" 13 #include "base/command_line.h"
12 #include "base/logging.h" 14 #include "base/logging.h"
13 #include "base/macros.h" 15 #include "base/macros.h"
14 #include "base/strings/string16.h" 16 #include "base/strings/string16.h"
15 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
17 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
18 #include "build/build_config.h" 20 #include "build/build_config.h"
19 #include "components/test_runner/mock_spell_check.h" 21 #include "components/test_runner/mock_spell_check.h"
20 #include "components/test_runner/test_interfaces.h" 22 #include "components/test_runner/test_interfaces.h"
21 #include "components/test_runner/web_test_delegate.h" 23 #include "components/test_runner/web_test_delegate.h"
22 #include "components/test_runner/web_view_test_proxy.h" 24 #include "components/test_runner/web_view_test_proxy.h"
25 #include "components/test_runner/web_widget_test_proxy.h"
23 #include "gin/handle.h" 26 #include "gin/handle.h"
24 #include "gin/object_template_builder.h" 27 #include "gin/object_template_builder.h"
25 #include "gin/wrappable.h" 28 #include "gin/wrappable.h"
26 #include "third_party/WebKit/public/platform/WebPointerProperties.h" 29 #include "third_party/WebKit/public/platform/WebPointerProperties.h"
27 #include "third_party/WebKit/public/platform/WebString.h" 30 #include "third_party/WebKit/public/platform/WebString.h"
28 #include "third_party/WebKit/public/platform/WebVector.h" 31 #include "third_party/WebKit/public/platform/WebVector.h"
29 #include "third_party/WebKit/public/web/WebContextMenuData.h" 32 #include "third_party/WebKit/public/web/WebContextMenuData.h"
30 #include "third_party/WebKit/public/web/WebKit.h" 33 #include "third_party/WebKit/public/web/WebKit.h"
31 #include "third_party/WebKit/public/web/WebLocalFrame.h" 34 #include "third_party/WebKit/public/web/WebLocalFrame.h"
32 #include "third_party/WebKit/public/web/WebPagePopup.h" 35 #include "third_party/WebKit/public/web/WebPagePopup.h"
(...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 1276
1274 WebMouseEvent::Button EventSender::last_button_type_ = 1277 WebMouseEvent::Button EventSender::last_button_type_ =
1275 WebMouseEvent::Button::NoButton; 1278 WebMouseEvent::Button::NoButton;
1276 1279
1277 EventSender::SavedEvent::SavedEvent() 1280 EventSender::SavedEvent::SavedEvent()
1278 : type(TYPE_UNSPECIFIED), 1281 : type(TYPE_UNSPECIFIED),
1279 button_type(WebMouseEvent::Button::NoButton), 1282 button_type(WebMouseEvent::Button::NoButton),
1280 milliseconds(0), 1283 milliseconds(0),
1281 modifiers(0) {} 1284 modifiers(0) {}
1282 1285
1283 EventSender::EventSender(WebViewTestProxyBase* web_view_test_proxy_base) 1286 EventSender::EventSender(WebWidgetTestProxyBase* web_widget_test_proxy_base)
1284 : web_view_test_proxy_base_(web_view_test_proxy_base), 1287 : web_widget_test_proxy_base_(web_widget_test_proxy_base),
1285 replaying_saved_events_(false), 1288 replaying_saved_events_(false),
1286 weak_factory_(this) { 1289 weak_factory_(this) {
1287 Reset(); 1290 Reset();
1288 } 1291 }
1289 1292
1290 EventSender::~EventSender() {} 1293 EventSender::~EventSender() {}
1291 1294
1292 void EventSender::Reset() { 1295 void EventSender::Reset() {
1293 DCHECK(current_drag_data_.isNull()); 1296 DCHECK(current_drag_data_.isNull());
1294 current_drag_data_.reset(); 1297 current_drag_data_.reset();
1295 current_drag_effect_ = blink::WebDragOperationNone; 1298 current_drag_effect_ = blink::WebDragOperationNone;
1296 current_drag_effects_allowed_ = blink::WebDragOperationNone; 1299 current_drag_effects_allowed_ = blink::WebDragOperationNone;
1297 if (view() && 1300 if (widget() &&
1298 current_pointer_state_[kRawMousePointerId].pressed_button_ != 1301 current_pointer_state_[kRawMousePointerId].pressed_button_ !=
1299 WebMouseEvent::Button::NoButton) 1302 WebMouseEvent::Button::NoButton)
1300 view()->mouseCaptureLost(); 1303 widget()->mouseCaptureLost();
1301 current_pointer_state_.clear(); 1304 current_pointer_state_.clear();
1302 is_drag_mode_ = true; 1305 is_drag_mode_ = true;
1303 force_layout_on_events_ = true; 1306 force_layout_on_events_ = true;
1304 1307
1305 #if defined(OS_WIN) 1308 #if defined(OS_WIN)
1306 wm_key_down_ = WM_KEYDOWN; 1309 wm_key_down_ = WM_KEYDOWN;
1307 wm_key_up_ = WM_KEYUP; 1310 wm_key_up_ = WM_KEYUP;
1308 wm_char_ = WM_CHAR; 1311 wm_char_ = WM_CHAR;
1309 wm_dead_char_ = WM_DEADCHAR; 1312 wm_dead_char_ = WM_DEADCHAR;
1310 wm_sys_key_down_ = WM_SYSKEYDOWN; 1313 wm_sys_key_down_ = WM_SYSKEYDOWN;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 WebDragOperationsMask mask) { 1345 WebDragOperationsMask mask) {
1343 WebMouseEvent unscaled_event; 1346 WebMouseEvent unscaled_event;
1344 InitMouseEvent(WebInputEvent::MouseDown, 1347 InitMouseEvent(WebInputEvent::MouseDown,
1345 current_pointer_state_[kRawMousePointerId].pressed_button_, 1348 current_pointer_state_[kRawMousePointerId].pressed_button_,
1346 current_pointer_state_[kRawMousePointerId].current_buttons_, 1349 current_pointer_state_[kRawMousePointerId].current_buttons_,
1347 current_pointer_state_[kRawMousePointerId].last_pos_, 1350 current_pointer_state_[kRawMousePointerId].last_pos_,
1348 GetCurrentEventTimeSec(), click_count_, 1351 GetCurrentEventTimeSec(), click_count_,
1349 current_pointer_state_[kRawMousePointerId].modifiers_, 1352 current_pointer_state_[kRawMousePointerId].modifiers_,
1350 &unscaled_event); 1353 &unscaled_event);
1351 1354
1352 std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); 1355 std::unique_ptr<WebInputEvent> scaled_event =
lfg 2016/09/29 22:12:52 This is doing more than scaling, rename it?
Łukasz Anforowicz 2016/09/29 23:42:35 Done (in patchset 8): - s/unscaled_event/raw_event
1353 const WebMouseEvent* event = 1356 TransformScreenToWidgetCoordinates(unscaled_event);
1354 scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) 1357 const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get());
1355 : &unscaled_event;
1356 1358
1357 WebPoint client_point(event->x, event->y); 1359 WebPoint client_point(event->x, event->y);
1358 WebPoint screen_point(event->globalX, event->globalY); 1360 WebPoint screen_point(event->globalX, event->globalY);
1359 current_drag_data_ = drag_data; 1361 current_drag_data_ = drag_data;
1360 current_drag_effects_allowed_ = mask; 1362 current_drag_effects_allowed_ = mask;
1361 current_drag_effect_ = view()->dragTargetDragEnter( 1363 current_drag_effect_ = view()->dragTargetDragEnter(
1362 drag_data, client_point, screen_point, current_drag_effects_allowed_, 1364 drag_data, client_point, screen_point, current_drag_effects_allowed_,
1363 modifiersWithButtons( 1365 modifiersWithButtons(
1364 current_pointer_state_[kRawMousePointerId].modifiers_, 1366 current_pointer_state_[kRawMousePointerId].modifiers_,
1365 current_pointer_state_[kRawMousePointerId].current_buttons_)); 1367 current_pointer_state_[kRawMousePointerId].current_buttons_));
(...skipping 14 matching lines...) Expand all
1380 } 1382 }
1381 1383
1382 void EventSender::PointerDown(int button_number, 1384 void EventSender::PointerDown(int button_number,
1383 int modifiers, 1385 int modifiers,
1384 WebPointerProperties::PointerType pointerType, 1386 WebPointerProperties::PointerType pointerType,
1385 int pointerId, 1387 int pointerId,
1386 float pressure, 1388 float pressure,
1387 int tiltX, 1389 int tiltX,
1388 int tiltY) { 1390 int tiltY) {
1389 if (force_layout_on_events_) 1391 if (force_layout_on_events_)
1390 view()->updateAllLifecyclePhases(); 1392 widget()->updateAllLifecyclePhases();
1391 1393
1392 DCHECK_NE(-1, button_number); 1394 DCHECK_NE(-1, button_number);
1393 1395
1394 WebMouseEvent::Button button_type = 1396 WebMouseEvent::Button button_type =
1395 GetButtonTypeFromButtonNumber(button_number); 1397 GetButtonTypeFromButtonNumber(button_number);
1396 1398
1397 WebMouseEvent event; 1399 WebMouseEvent event;
1398 int click_count = 0; 1400 int click_count = 0;
1399 current_pointer_state_[pointerId].pressed_button_ = button_type; 1401 current_pointer_state_[pointerId].pressed_button_ = button_type;
1400 current_pointer_state_[pointerId].current_buttons_ |= 1402 current_pointer_state_[pointerId].current_buttons_ |=
(...skipping 16 matching lines...) Expand all
1417 } 1419 }
1418 1420
1419 void EventSender::PointerUp(int button_number, 1421 void EventSender::PointerUp(int button_number,
1420 int modifiers, 1422 int modifiers,
1421 WebPointerProperties::PointerType pointerType, 1423 WebPointerProperties::PointerType pointerType,
1422 int pointerId, 1424 int pointerId,
1423 float pressure, 1425 float pressure,
1424 int tiltX, 1426 int tiltX,
1425 int tiltY) { 1427 int tiltY) {
1426 if (force_layout_on_events_) 1428 if (force_layout_on_events_)
1427 view()->updateAllLifecyclePhases(); 1429 widget()->updateAllLifecyclePhases();
1428 1430
1429 DCHECK_NE(-1, button_number); 1431 DCHECK_NE(-1, button_number);
1430 1432
1431 WebMouseEvent::Button button_type = 1433 WebMouseEvent::Button button_type =
1432 GetButtonTypeFromButtonNumber(button_number); 1434 GetButtonTypeFromButtonNumber(button_number);
1433 1435
1434 if (pointerType == WebPointerProperties::PointerType::Mouse && 1436 if (pointerType == WebPointerProperties::PointerType::Mouse &&
1435 is_drag_mode_ && !replaying_saved_events_) { 1437 is_drag_mode_ && !replaying_saved_events_) {
1436 SavedEvent saved_event; 1438 SavedEvent saved_event;
1437 saved_event.type = SavedEvent::TYPE_MOUSE_UP; 1439 saved_event.type = SavedEvent::TYPE_MOUSE_UP;
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
1686 event_down.modifiers |= WebInputEvent::IsKeyPad; 1688 event_down.modifiers |= WebInputEvent::IsKeyPad;
1687 break; 1689 break;
1688 } 1690 }
1689 1691
1690 WebKeyboardEvent event_up; 1692 WebKeyboardEvent event_up;
1691 event_up = event_down; 1693 event_up = event_down;
1692 event_up.type = WebInputEvent::KeyUp; 1694 event_up.type = WebInputEvent::KeyUp;
1693 // EventSender.m forces a layout here, with at least one 1695 // EventSender.m forces a layout here, with at least one
1694 // test (fast/forms/focus-control-to-page.html) relying on this. 1696 // test (fast/forms/focus-control-to-page.html) relying on this.
1695 if (force_layout_on_events_) 1697 if (force_layout_on_events_)
1696 view()->updateAllLifecyclePhases(); 1698 widget()->updateAllLifecyclePhases();
1697 1699
1698 // In the browser, if a keyboard event corresponds to an editor command, 1700 // In the browser, if a keyboard event corresponds to an editor command,
1699 // the command will be dispatched to the renderer just before dispatching 1701 // the command will be dispatched to the renderer just before dispatching
1700 // the keyboard event, and then it will be executed in the 1702 // the keyboard event, and then it will be executed in the
1701 // RenderView::handleCurrentKeyboardEvent() method. 1703 // RenderView::handleCurrentKeyboardEvent() method.
1702 // We just simulate the same behavior here. 1704 // We just simulate the same behavior here.
1703 std::string edit_command; 1705 std::string edit_command;
1704 if (GetEditCommand(event_down, &edit_command)) 1706 if (GetEditCommand(event_down, &edit_command))
1705 delegate()->SetEditCommand(edit_command, ""); 1707 delegate()->SetEditCommand(edit_command, "");
1706 1708
(...skipping 20 matching lines...) Expand all
1727 HandleInputEventOnViewOrPopup(event_up); 1729 HandleInputEventOnViewOrPopup(event_up);
1728 } 1730 }
1729 1731
1730 void EventSender::EnableDOMUIEventLogging() {} 1732 void EventSender::EnableDOMUIEventLogging() {}
1731 1733
1732 void EventSender::FireKeyboardEventsToElement() {} 1734 void EventSender::FireKeyboardEventsToElement() {}
1733 1735
1734 void EventSender::ClearKillRing() {} 1736 void EventSender::ClearKillRing() {}
1735 1737
1736 std::vector<std::string> EventSender::ContextClick() { 1738 std::vector<std::string> EventSender::ContextClick() {
1737 if (force_layout_on_events_) { 1739 if (force_layout_on_events_)
1738 view()->updateAllLifecyclePhases(); 1740 widget()->updateAllLifecyclePhases();
1739 }
1740 1741
1741 UpdateClickCountForButton(WebMouseEvent::Button::Right); 1742 UpdateClickCountForButton(WebMouseEvent::Button::Right);
1742 1743
1743 // Clears last context menu data because we need to know if the context menu 1744 // Clears last context menu data because we need to know if the context menu
1744 // be requested after following mouse events. 1745 // be requested after following mouse events.
1745 last_context_menu_data_.reset(); 1746 last_context_menu_data_.reset();
1746 1747
1747 // Generate right mouse down and up. 1748 // Generate right mouse down and up.
1748 WebMouseEvent event; 1749 WebMouseEvent event;
1749 // This is a hack to work around only allowing a single pressed button since 1750 // This is a hack to work around only allowing a single pressed button since
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 void EventSender::GestureFlingCancel() { 1904 void EventSender::GestureFlingCancel() {
1904 WebGestureEvent event; 1905 WebGestureEvent event;
1905 event.type = WebInputEvent::GestureFlingCancel; 1906 event.type = WebInputEvent::GestureFlingCancel;
1906 // Generally it won't matter what device we use here, and since it might 1907 // Generally it won't matter what device we use here, and since it might
1907 // be cumbersome to expect all callers to specify a device, we'll just 1908 // be cumbersome to expect all callers to specify a device, we'll just
1908 // choose Touchpad here. 1909 // choose Touchpad here.
1909 event.sourceDevice = blink::WebGestureDeviceTouchpad; 1910 event.sourceDevice = blink::WebGestureDeviceTouchpad;
1910 event.timeStampSeconds = GetCurrentEventTimeSec(); 1911 event.timeStampSeconds = GetCurrentEventTimeSec();
1911 1912
1912 if (force_layout_on_events_) 1913 if (force_layout_on_events_)
1913 view()->updateAllLifecyclePhases(); 1914 widget()->updateAllLifecyclePhases();
1914 1915
1915 HandleInputEventOnViewOrPopup(event); 1916 HandleInputEventOnViewOrPopup(event);
1916 } 1917 }
1917 1918
1918 void EventSender::GestureFlingStart(float x, 1919 void EventSender::GestureFlingStart(float x,
1919 float y, 1920 float y,
1920 float velocity_x, 1921 float velocity_x,
1921 float velocity_y, 1922 float velocity_y,
1922 gin::Arguments* args) { 1923 gin::Arguments* args) {
1923 WebGestureEvent event; 1924 WebGestureEvent event;
(...skipping 23 matching lines...) Expand all
1947 event.x = x; 1948 event.x = x;
1948 event.y = y; 1949 event.y = y;
1949 event.globalX = event.x; 1950 event.globalX = event.x;
1950 event.globalY = event.y; 1951 event.globalY = event.y;
1951 1952
1952 event.data.flingStart.velocityX = velocity_x; 1953 event.data.flingStart.velocityX = velocity_x;
1953 event.data.flingStart.velocityY = velocity_y; 1954 event.data.flingStart.velocityY = velocity_y;
1954 event.timeStampSeconds = GetCurrentEventTimeSec(); 1955 event.timeStampSeconds = GetCurrentEventTimeSec();
1955 1956
1956 if (force_layout_on_events_) 1957 if (force_layout_on_events_)
1957 view()->updateAllLifecyclePhases(); 1958 widget()->updateAllLifecyclePhases();
1958 1959
1959 HandleInputEventOnViewOrPopup(event); 1960 HandleInputEventOnViewOrPopup(event);
1960 } 1961 }
1961 1962
1962 bool EventSender::IsFlinging() const { 1963 bool EventSender::IsFlinging() const {
1963 return view()->isFlinging(); 1964 return view()->isFlinging();
1964 } 1965 }
1965 1966
1966 void EventSender::GestureScrollFirstPoint(int x, int y) { 1967 void EventSender::GestureScrollFirstPoint(int x, int y) {
1967 current_gesture_location_ = WebPoint(x, y); 1968 current_gesture_location_ = WebPoint(x, y);
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
2134 InitMouseWheelEvent(args, scroll_type, &wheel_event, &send_gestures); 2135 InitMouseWheelEvent(args, scroll_type, &wheel_event, &send_gestures);
2135 if (HandleInputEventOnViewOrPopup(wheel_event) == 2136 if (HandleInputEventOnViewOrPopup(wheel_event) ==
2136 WebInputEventResult::NotHandled && 2137 WebInputEventResult::NotHandled &&
2137 send_gestures) { 2138 send_gestures) {
2138 SendGesturesForMouseWheelEvent(wheel_event); 2139 SendGesturesForMouseWheelEvent(wheel_event);
2139 } 2140 }
2140 } 2141 }
2141 2142
2142 void EventSender::MouseMoveTo(gin::Arguments* args) { 2143 void EventSender::MouseMoveTo(gin::Arguments* args) {
2143 if (force_layout_on_events_) 2144 if (force_layout_on_events_)
2144 view()->updateAllLifecyclePhases(); 2145 widget()->updateAllLifecyclePhases();
2145 2146
2146 double x; 2147 double x;
2147 double y; 2148 double y;
2148 if (!args->GetNext(&x) || !args->GetNext(&y)) { 2149 if (!args->GetNext(&x) || !args->GetNext(&y)) {
2149 args->ThrowError(); 2150 args->ThrowError();
2150 return; 2151 return;
2151 } 2152 }
2152 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y)); 2153 WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y));
2153 2154
2154 int modifiers = 0; 2155 int modifiers = 0;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 GetCurrentEventTimeSec(), click_count, modifiers, pointerType, 2190 GetCurrentEventTimeSec(), click_count, modifiers, pointerType,
2190 pointerId, pressure, tiltX, tiltY, &event); 2191 pointerId, pressure, tiltX, tiltY, &event);
2191 HandleInputEventOnViewOrPopup(event); 2192 HandleInputEventOnViewOrPopup(event);
2192 if (pointerType == WebPointerProperties::PointerType::Mouse) 2193 if (pointerType == WebPointerProperties::PointerType::Mouse)
2193 DoDragAfterMouseMove(event); 2194 DoDragAfterMouseMove(event);
2194 } 2195 }
2195 } 2196 }
2196 2197
2197 void EventSender::MouseLeave() { 2198 void EventSender::MouseLeave() {
2198 if (force_layout_on_events_) 2199 if (force_layout_on_events_)
2199 view()->updateAllLifecyclePhases(); 2200 widget()->updateAllLifecyclePhases();
2200 2201
2201 WebMouseEvent event; 2202 WebMouseEvent event;
2202 InitMouseEvent(WebInputEvent::MouseLeave, WebMouseEvent::Button::NoButton, 0, 2203 InitMouseEvent(WebInputEvent::MouseLeave, WebMouseEvent::Button::NoButton, 0,
2203 current_pointer_state_[kRawMousePointerId].last_pos_, 2204 current_pointer_state_[kRawMousePointerId].last_pos_,
2204 GetCurrentEventTimeSec(), click_count_, 0, &event); 2205 GetCurrentEventTimeSec(), click_count_, 0, &event);
2205 HandleInputEventOnViewOrPopup(event); 2206 HandleInputEventOnViewOrPopup(event);
2206 } 2207 }
2207 2208
2208 2209
2209 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) { 2210 void EventSender::ScheduleAsynchronousClick(int button_number, int modifiers) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2258 2259
2259 void EventSender::SendCurrentTouchEvent(WebInputEvent::Type type, 2260 void EventSender::SendCurrentTouchEvent(WebInputEvent::Type type,
2260 gin::Arguments* args) { 2261 gin::Arguments* args) {
2261 bool moved_beyond_slop_region; 2262 bool moved_beyond_slop_region;
2262 uint32_t unique_touch_event_id; 2263 uint32_t unique_touch_event_id;
2263 GetOptionalTouchArgs(args, moved_beyond_slop_region, unique_touch_event_id); 2264 GetOptionalTouchArgs(args, moved_beyond_slop_region, unique_touch_event_id);
2264 2265
2265 DCHECK_GT(static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap), 2266 DCHECK_GT(static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap),
2266 touch_points_.size()); 2267 touch_points_.size());
2267 if (force_layout_on_events_) 2268 if (force_layout_on_events_)
2268 view()->updateAllLifecyclePhases(); 2269 widget()->updateAllLifecyclePhases();
2269 2270
2270 WebTouchEvent touch_event; 2271 WebTouchEvent touch_event;
2271 touch_event.type = type; 2272 touch_event.type = type;
2272 touch_event.modifiers = touch_modifiers_; 2273 touch_event.modifiers = touch_modifiers_;
2273 touch_event.dispatchType = touch_cancelable_ 2274 touch_event.dispatchType = touch_cancelable_
2274 ? WebInputEvent::Blocking 2275 ? WebInputEvent::Blocking
2275 : WebInputEvent::EventNonBlocking; 2276 : WebInputEvent::EventNonBlocking;
2276 touch_event.timeStampSeconds = GetCurrentEventTimeSec(); 2277 touch_event.timeStampSeconds = GetCurrentEventTimeSec();
2277 touch_event.movedBeyondSlopRegion = moved_beyond_slop_region; 2278 touch_event.movedBeyondSlopRegion = moved_beyond_slop_region;
2278 touch_event.uniqueTouchEventId = unique_touch_event_id; 2279 touch_event.uniqueTouchEventId = unique_touch_event_id;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
2517 NOTREACHED(); 2518 NOTREACHED();
2518 } 2519 }
2519 2520
2520 event.uniqueTouchEventId = GetUniqueTouchEventId(args); 2521 event.uniqueTouchEventId = GetUniqueTouchEventId(args);
2521 2522
2522 event.globalX = event.x; 2523 event.globalX = event.x;
2523 event.globalY = event.y; 2524 event.globalY = event.y;
2524 event.timeStampSeconds = GetCurrentEventTimeSec(); 2525 event.timeStampSeconds = GetCurrentEventTimeSec();
2525 2526
2526 if (force_layout_on_events_) 2527 if (force_layout_on_events_)
2527 view()->updateAllLifecyclePhases(); 2528 widget()->updateAllLifecyclePhases();
2528 2529
2529 WebInputEventResult result = HandleInputEventOnViewOrPopup(event); 2530 WebInputEventResult result = HandleInputEventOnViewOrPopup(event);
2530 2531
2531 // Long press might start a drag drop session. Complete it if so. 2532 // Long press might start a drag drop session. Complete it if so.
2532 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { 2533 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) {
2533 WebMouseEvent mouse_event; 2534 WebMouseEvent mouse_event;
2534 InitMouseEvent(WebInputEvent::MouseDown, 2535 InitMouseEvent(WebInputEvent::MouseDown,
2535 current_pointer_state_[kRawMousePointerId].pressed_button_, 2536 current_pointer_state_[kRawMousePointerId].pressed_button_,
2536 current_pointer_state_[kRawMousePointerId].current_buttons_, 2537 current_pointer_state_[kRawMousePointerId].current_buttons_,
2537 WebPoint(x, y), GetCurrentEventTimeSec(), click_count_, 2538 WebPoint(x, y), GetCurrentEventTimeSec(), click_count_,
(...skipping 21 matching lines...) Expand all
2559 } 2560 }
2560 2561
2561 void EventSender::InitMouseWheelEvent(gin::Arguments* args, 2562 void EventSender::InitMouseWheelEvent(gin::Arguments* args,
2562 MouseScrollType scroll_type, 2563 MouseScrollType scroll_type,
2563 WebMouseWheelEvent* event, 2564 WebMouseWheelEvent* event,
2564 bool* send_gestures) { 2565 bool* send_gestures) {
2565 // Force a layout here just to make sure every position has been 2566 // Force a layout here just to make sure every position has been
2566 // determined before we send events (as well as all the other methods 2567 // determined before we send events (as well as all the other methods
2567 // that send an event do). 2568 // that send an event do).
2568 if (force_layout_on_events_) 2569 if (force_layout_on_events_)
2569 view()->updateAllLifecyclePhases(); 2570 widget()->updateAllLifecyclePhases();
2570 2571
2571 double horizontal; 2572 double horizontal;
2572 if (!args->GetNext(&horizontal)) { 2573 if (!args->GetNext(&horizontal)) {
2573 args->ThrowError(); 2574 args->ThrowError();
2574 return; 2575 return;
2575 } 2576 }
2576 double vertical; 2577 double vertical;
2577 if (!args->GetNext(&vertical)) { 2578 if (!args->GetNext(&vertical)) {
2578 args->ThrowError(); 2579 args->ThrowError();
2579 return; 2580 return;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2668 e->tiltX = tiltX; 2669 e->tiltX = tiltX;
2669 e->tiltY = tiltY; 2670 e->tiltY = tiltY;
2670 } 2671 }
2671 2672
2672 if (!getPointerType(args, false, e->pointerType)) 2673 if (!getPointerType(args, false, e->pointerType))
2673 return; 2674 return;
2674 } 2675 }
2675 2676
2676 void EventSender::FinishDragAndDrop(const WebMouseEvent& unscaled_event, 2677 void EventSender::FinishDragAndDrop(const WebMouseEvent& unscaled_event,
2677 blink::WebDragOperation drag_effect) { 2678 blink::WebDragOperation drag_effect) {
2678 std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); 2679 std::unique_ptr<WebInputEvent> scaled_event =
2680 TransformScreenToWidgetCoordinates(unscaled_event);
2679 const WebMouseEvent* event = 2681 const WebMouseEvent* event =
2680 scaled_event.get() ? static_cast<const WebMouseEvent*>(scaled_event.get()) 2682 static_cast<const WebMouseEvent*>(scaled_event.get());
2681 : &unscaled_event;
2682 2683
2683 WebPoint client_point(event->x, event->y); 2684 WebPoint client_point(event->x, event->y);
2684 WebPoint screen_point(event->globalX, event->globalY); 2685 WebPoint screen_point(event->globalX, event->globalY);
2685 current_drag_effect_ = drag_effect; 2686 current_drag_effect_ = drag_effect;
2686 if (current_drag_effect_) { 2687 if (current_drag_effect_) {
2687 // Specifically pass any keyboard modifiers to the drop method. This allows 2688 // Specifically pass any keyboard modifiers to the drop method. This allows
2688 // tests to control the drop type (i.e. copy or move). 2689 // tests to control the drop type (i.e. copy or move).
2689 view()->dragTargetDrop(current_drag_data_, client_point, screen_point, 2690 view()->dragTargetDrop(current_drag_data_, client_point, screen_point,
2690 event->modifiers); 2691 event->modifiers);
2691 } else { 2692 } else {
2692 view()->dragTargetDragLeave(); 2693 view()->dragTargetDragLeave();
2693 } 2694 }
2694 current_drag_data_.reset(); 2695 current_drag_data_.reset();
2695 view()->dragSourceEndedAt(client_point, screen_point, current_drag_effect_); 2696 view()->dragSourceEndedAt(client_point, screen_point, current_drag_effect_);
2696 view()->dragSourceSystemDragEnded(); 2697 view()->dragSourceSystemDragEnded();
2697 } 2698 }
2698 2699
2699 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& unscaled_event) { 2700 void EventSender::DoDragAfterMouseUp(const WebMouseEvent& unscaled_event) {
2700 std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); 2701 std::unique_ptr<WebInputEvent> scaled_event =
2701 const WebMouseEvent* event = 2702 TransformScreenToWidgetCoordinates(unscaled_event);
2702 scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) 2703 const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get());
2703 : &unscaled_event;
2704 2704
2705 last_click_time_sec_ = event->timeStampSeconds; 2705 last_click_time_sec_ = event->timeStampSeconds;
2706 last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_; 2706 last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_;
2707 2707
2708 // If we're in a drag operation, complete it. 2708 // If we're in a drag operation, complete it.
2709 if (current_drag_data_.isNull()) 2709 if (current_drag_data_.isNull())
2710 return; 2710 return;
2711 2711
2712 WebPoint client_point(event->x, event->y); 2712 WebPoint client_point(event->x, event->y);
2713 WebPoint screen_point(event->globalX, event->globalY); 2713 WebPoint screen_point(event->globalX, event->globalY);
2714 blink::WebDragOperation drag_effect = view()->dragTargetDragOver( 2714 blink::WebDragOperation drag_effect = view()->dragTargetDragOver(
2715 client_point, screen_point, current_drag_effects_allowed_, 2715 client_point, screen_point, current_drag_effects_allowed_,
2716 event->modifiers); 2716 event->modifiers);
2717 2717
2718 // Bail if dragover caused cancellation. 2718 // Bail if dragover caused cancellation.
2719 if (current_drag_data_.isNull()) 2719 if (current_drag_data_.isNull())
2720 return; 2720 return;
2721 2721
2722 FinishDragAndDrop(unscaled_event, drag_effect); 2722 FinishDragAndDrop(unscaled_event, drag_effect);
2723 } 2723 }
2724 2724
2725 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& unscaled_event) { 2725 void EventSender::DoDragAfterMouseMove(const WebMouseEvent& unscaled_event) {
2726 if (current_pointer_state_[kRawMousePointerId].pressed_button_ == 2726 if (current_pointer_state_[kRawMousePointerId].pressed_button_ ==
2727 WebMouseEvent::Button::NoButton || 2727 WebMouseEvent::Button::NoButton ||
2728 current_drag_data_.isNull()) { 2728 current_drag_data_.isNull()) {
2729 return; 2729 return;
2730 } 2730 }
2731 2731
2732 std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); 2732 std::unique_ptr<WebInputEvent> scaled_event =
2733 const WebMouseEvent* event = 2733 TransformScreenToWidgetCoordinates(unscaled_event);
2734 scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) 2734 const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get());
2735 : &unscaled_event;
2736 2735
2737 WebPoint client_point(event->x, event->y); 2736 WebPoint client_point(event->x, event->y);
2738 WebPoint screen_point(event->globalX, event->globalY); 2737 WebPoint screen_point(event->globalX, event->globalY);
2739 current_drag_effect_ = view()->dragTargetDragOver( 2738 current_drag_effect_ = view()->dragTargetDragOver(
2740 client_point, screen_point, current_drag_effects_allowed_, 2739 client_point, screen_point, current_drag_effects_allowed_,
2741 event->modifiers); 2740 event->modifiers);
2742 } 2741 }
2743 2742
2744 void EventSender::ReplaySavedEvents() { 2743 void EventSender::ReplaySavedEvents() {
2745 replaying_saved_events_ = true; 2744 replaying_saved_events_ = true;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2782 } 2781 }
2783 default: 2782 default:
2784 NOTREACHED(); 2783 NOTREACHED();
2785 } 2784 }
2786 } 2785 }
2787 2786
2788 replaying_saved_events_ = false; 2787 replaying_saved_events_ = false;
2789 } 2788 }
2790 2789
2791 WebInputEventResult EventSender::HandleInputEventOnViewOrPopup( 2790 WebInputEventResult EventSender::HandleInputEventOnViewOrPopup(
2792 const WebInputEvent& unscaled_event) { 2791 const WebInputEvent& event) {
2793 std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); 2792 last_event_timestamp_ = event.timeStampSeconds;
2794 const WebInputEvent* event =
2795 scaled_event.get() ? scaled_event.get() : &unscaled_event;
2796 2793
2797 last_event_timestamp_ = event->timeStampSeconds; 2794 if (WebPagePopup* popup = widget()->pagePopup()) {
2795 // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the
2796 // event does not have to be converted.
2797 std::unique_ptr<WebInputEvent> scaled_event =
2798 ui::ScaleWebInputEvent(event, delegate()->GetWindowToViewportScale());
2799 const WebInputEvent* popup_friendly_event =
2800 scaled_event.get() ? scaled_event.get() : &event;
2801 if (!WebInputEvent::isKeyboardEventType(popup_friendly_event->type))
2802 return popup->handleInputEvent(*popup_friendly_event);
2803 }
2798 2804
2799 if (WebPagePopup* popup = view()->pagePopup()) { 2805 std::unique_ptr<WebInputEvent> widget_friendly_event =
2800 if (!WebInputEvent::isKeyboardEventType(event->type)) 2806 TransformScreenToWidgetCoordinates(event);
2801 return popup->handleInputEvent(*event); 2807 return widget()->handleInputEvent(*widget_friendly_event);
2802 }
2803 return view()->handleInputEvent(*event);
2804 } 2808 }
2805 2809
2806 void EventSender::SendGesturesForMouseWheelEvent( 2810 void EventSender::SendGesturesForMouseWheelEvent(
2807 const WebMouseWheelEvent wheel_event) { 2811 const WebMouseWheelEvent wheel_event) {
2808 WebGestureEvent begin_event; 2812 WebGestureEvent begin_event;
2809 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollBegin, 2813 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollBegin,
2810 GetCurrentEventTimeSec(), wheel_event, 2814 GetCurrentEventTimeSec(), wheel_event,
2811 &begin_event); 2815 &begin_event);
2812 begin_event.data.scrollBegin.deltaXHint = wheel_event.deltaX; 2816 begin_event.data.scrollBegin.deltaXHint = wheel_event.deltaX;
2813 begin_event.data.scrollBegin.deltaYHint = wheel_event.deltaY; 2817 begin_event.data.scrollBegin.deltaYHint = wheel_event.deltaY;
2814 if (wheel_event.scrollByPage) { 2818 if (wheel_event.scrollByPage) {
2815 begin_event.data.scrollBegin.deltaHintUnits = blink::WebGestureEvent::Page; 2819 begin_event.data.scrollBegin.deltaHintUnits = blink::WebGestureEvent::Page;
2816 if (begin_event.data.scrollBegin.deltaXHint) { 2820 if (begin_event.data.scrollBegin.deltaXHint) {
2817 begin_event.data.scrollBegin.deltaXHint = 2821 begin_event.data.scrollBegin.deltaXHint =
2818 begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1; 2822 begin_event.data.scrollBegin.deltaXHint > 0 ? 1 : -1;
2819 } 2823 }
2820 if (begin_event.data.scrollBegin.deltaYHint) { 2824 if (begin_event.data.scrollBegin.deltaYHint) {
2821 begin_event.data.scrollBegin.deltaYHint = 2825 begin_event.data.scrollBegin.deltaYHint =
2822 begin_event.data.scrollBegin.deltaYHint > 0 ? 1 : -1; 2826 begin_event.data.scrollBegin.deltaYHint > 0 ? 1 : -1;
2823 } 2827 }
2824 } else { 2828 } else {
2825 begin_event.data.scrollBegin.deltaHintUnits = 2829 begin_event.data.scrollBegin.deltaHintUnits =
2826 wheel_event.hasPreciseScrollingDeltas 2830 wheel_event.hasPreciseScrollingDeltas
2827 ? blink::WebGestureEvent::PrecisePixels 2831 ? blink::WebGestureEvent::PrecisePixels
2828 : blink::WebGestureEvent::Pixels; 2832 : blink::WebGestureEvent::Pixels;
2829 } 2833 }
2830 2834
2831 if (force_layout_on_events_) 2835 if (force_layout_on_events_)
2832 view()->updateAllLifecyclePhases(); 2836 widget()->updateAllLifecyclePhases();
2833 2837
2834 HandleInputEventOnViewOrPopup(begin_event); 2838 HandleInputEventOnViewOrPopup(begin_event);
2835 2839
2836 WebGestureEvent update_event; 2840 WebGestureEvent update_event;
2837 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollUpdate, 2841 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollUpdate,
2838 GetCurrentEventTimeSec(), wheel_event, 2842 GetCurrentEventTimeSec(), wheel_event,
2839 &update_event); 2843 &update_event);
2840 update_event.data.scrollUpdate.deltaX = 2844 update_event.data.scrollUpdate.deltaX =
2841 begin_event.data.scrollBegin.deltaXHint; 2845 begin_event.data.scrollBegin.deltaXHint;
2842 update_event.data.scrollUpdate.deltaY = 2846 update_event.data.scrollUpdate.deltaY =
2843 begin_event.data.scrollBegin.deltaYHint; 2847 begin_event.data.scrollBegin.deltaYHint;
2844 update_event.data.scrollUpdate.deltaUnits = 2848 update_event.data.scrollUpdate.deltaUnits =
2845 begin_event.data.scrollBegin.deltaHintUnits; 2849 begin_event.data.scrollBegin.deltaHintUnits;
2846 2850
2847 if (force_layout_on_events_) 2851 if (force_layout_on_events_)
2848 view()->updateAllLifecyclePhases(); 2852 widget()->updateAllLifecyclePhases();
2849 HandleInputEventOnViewOrPopup(update_event); 2853 HandleInputEventOnViewOrPopup(update_event);
2850 2854
2851 WebGestureEvent end_event; 2855 WebGestureEvent end_event;
2852 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollEnd, 2856 InitGestureEventFromMouseWheel(WebInputEvent::GestureScrollEnd,
2853 GetCurrentEventTimeSec(), wheel_event, 2857 GetCurrentEventTimeSec(), wheel_event,
2854 &end_event); 2858 &end_event);
2855 end_event.data.scrollEnd.deltaUnits = 2859 end_event.data.scrollEnd.deltaUnits =
2856 begin_event.data.scrollBegin.deltaHintUnits; 2860 begin_event.data.scrollBegin.deltaHintUnits;
2857 2861
2858 if (force_layout_on_events_) 2862 if (force_layout_on_events_)
2859 view()->updateAllLifecyclePhases(); 2863 widget()->updateAllLifecyclePhases();
2860 HandleInputEventOnViewOrPopup(end_event); 2864 HandleInputEventOnViewOrPopup(end_event);
2861 } 2865 }
2862 2866
2863 TestInterfaces* EventSender::interfaces() { 2867 TestInterfaces* EventSender::interfaces() {
2864 return web_view_test_proxy_base_->test_interfaces(); 2868 return web_widget_test_proxy_base_->web_view_test_proxy_base()
2869 ->test_interfaces();
2865 } 2870 }
2866 2871
2867 WebTestDelegate* EventSender::delegate() { 2872 WebTestDelegate* EventSender::delegate() {
2868 return web_view_test_proxy_base_->delegate(); 2873 return web_widget_test_proxy_base_->web_view_test_proxy_base()->delegate();
2869 } 2874 }
2870 2875
2871 const blink::WebView* EventSender::view() const { 2876 const blink::WebView* EventSender::view() const {
2872 return web_view_test_proxy_base_->web_view(); 2877 return web_widget_test_proxy_base_->web_view_test_proxy_base()->web_view();
2873 } 2878 }
2874 2879
2875 blink::WebView* EventSender::view() { 2880 blink::WebView* EventSender::view() {
2876 return web_view_test_proxy_base_->web_view(); 2881 return web_widget_test_proxy_base_->web_view_test_proxy_base()->web_view();
2877 } 2882 }
2878 2883
2879 std::unique_ptr<WebInputEvent> EventSender::ScaleEvent( 2884 blink::WebWidget* EventSender::widget() {
2885 return web_widget_test_proxy_base_->web_widget();
2886 }
2887
2888 std::unique_ptr<WebInputEvent> EventSender::TransformScreenToWidgetCoordinates(
2880 const WebInputEvent& event) { 2889 const WebInputEvent& event) {
2881 // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the event 2890 return delegate()->TransformScreenToWidgetCoordinates(
2882 // does not have to be converted. 2891 web_widget_test_proxy_base_, event);
2883 return ui::ScaleWebInputEvent(event, delegate()->GetWindowToViewportScale());
2884 } 2892 }
2885 2893
2886 } // namespace test_runner 2894 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698