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