Chromium Code Reviews| Index: components/test_runner/event_sender.cc |
| diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc |
| index ba9165488adf35628ec1fe83406d742f4f151c14..6fa296a917a589cc9f8afd21088548b0103f7aaa 100644 |
| --- a/components/test_runner/event_sender.cc |
| +++ b/components/test_runner/event_sender.cc |
| @@ -6,6 +6,8 @@ |
| #include <stddef.h> |
| +#include <memory> |
| + |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/command_line.h" |
| @@ -20,6 +22,7 @@ |
| #include "components/test_runner/test_interfaces.h" |
| #include "components/test_runner/web_test_delegate.h" |
| #include "components/test_runner/web_view_test_proxy.h" |
| +#include "components/test_runner/web_widget_test_proxy.h" |
| #include "gin/handle.h" |
| #include "gin/object_template_builder.h" |
| #include "gin/wrappable.h" |
| @@ -1280,8 +1283,8 @@ EventSender::SavedEvent::SavedEvent() |
| milliseconds(0), |
| modifiers(0) {} |
| -EventSender::EventSender(WebViewTestProxyBase* web_view_test_proxy_base) |
| - : web_view_test_proxy_base_(web_view_test_proxy_base), |
| +EventSender::EventSender(WebWidgetTestProxyBase* web_widget_test_proxy_base) |
| + : web_widget_test_proxy_base_(web_widget_test_proxy_base), |
| replaying_saved_events_(false), |
| weak_factory_(this) { |
| Reset(); |
| @@ -1294,10 +1297,10 @@ void EventSender::Reset() { |
| current_drag_data_.reset(); |
| current_drag_effect_ = blink::WebDragOperationNone; |
| current_drag_effects_allowed_ = blink::WebDragOperationNone; |
| - if (view() && |
| + if (widget() && |
| current_pointer_state_[kRawMousePointerId].pressed_button_ != |
| WebMouseEvent::Button::NoButton) |
| - view()->mouseCaptureLost(); |
| + widget()->mouseCaptureLost(); |
| current_pointer_state_.clear(); |
| is_drag_mode_ = true; |
| force_layout_on_events_ = true; |
| @@ -1349,10 +1352,9 @@ void EventSender::DoDragDrop(const WebDragData& drag_data, |
| 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; |
| + 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
|
| + TransformScreenToWidgetCoordinates(unscaled_event); |
| + const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get()); |
| WebPoint client_point(event->x, event->y); |
| WebPoint screen_point(event->globalX, event->globalY); |
| @@ -1387,7 +1389,7 @@ void EventSender::PointerDown(int button_number, |
| int tiltX, |
| int tiltY) { |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| DCHECK_NE(-1, button_number); |
| @@ -1424,7 +1426,7 @@ void EventSender::PointerUp(int button_number, |
| int tiltX, |
| int tiltY) { |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| DCHECK_NE(-1, button_number); |
| @@ -1693,7 +1695,7 @@ void EventSender::KeyDown(const std::string& code_str, |
| // EventSender.m forces a layout here, with at least one |
| // test (fast/forms/focus-control-to-page.html) relying on this. |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| // In the browser, if a keyboard event corresponds to an editor command, |
| // the command will be dispatched to the renderer just before dispatching |
| @@ -1734,9 +1736,8 @@ void EventSender::FireKeyboardEventsToElement() {} |
| void EventSender::ClearKillRing() {} |
| std::vector<std::string> EventSender::ContextClick() { |
| - if (force_layout_on_events_) { |
| - view()->updateAllLifecyclePhases(); |
| - } |
| + if (force_layout_on_events_) |
| + widget()->updateAllLifecyclePhases(); |
| UpdateClickCountForButton(WebMouseEvent::Button::Right); |
| @@ -1910,7 +1911,7 @@ void EventSender::GestureFlingCancel() { |
| event.timeStampSeconds = GetCurrentEventTimeSec(); |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| HandleInputEventOnViewOrPopup(event); |
| } |
| @@ -1954,7 +1955,7 @@ void EventSender::GestureFlingStart(float x, |
| event.timeStampSeconds = GetCurrentEventTimeSec(); |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| HandleInputEventOnViewOrPopup(event); |
| } |
| @@ -2141,7 +2142,7 @@ void EventSender::MouseScrollBy(gin::Arguments* args, |
| void EventSender::MouseMoveTo(gin::Arguments* args) { |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| double x; |
| double y; |
| @@ -2196,7 +2197,7 @@ void EventSender::MouseMoveTo(gin::Arguments* args) { |
| void EventSender::MouseLeave() { |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| WebMouseEvent event; |
| InitMouseEvent(WebInputEvent::MouseLeave, WebMouseEvent::Button::NoButton, 0, |
| @@ -2265,7 +2266,7 @@ void EventSender::SendCurrentTouchEvent(WebInputEvent::Type type, |
| DCHECK_GT(static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap), |
| touch_points_.size()); |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| WebTouchEvent touch_event; |
| touch_event.type = type; |
| @@ -2524,7 +2525,7 @@ void EventSender::GestureEvent(WebInputEvent::Type type, |
| event.timeStampSeconds = GetCurrentEventTimeSec(); |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| WebInputEventResult result = HandleInputEventOnViewOrPopup(event); |
| @@ -2566,7 +2567,7 @@ void EventSender::InitMouseWheelEvent(gin::Arguments* args, |
| // determined before we send events (as well as all the other methods |
| // that send an event do). |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| double horizontal; |
| if (!args->GetNext(&horizontal)) { |
| @@ -2675,10 +2676,10 @@ void EventSender::InitPointerProperties(gin::Arguments* args, |
| void EventSender::FinishDragAndDrop(const WebMouseEvent& unscaled_event, |
| blink::WebDragOperation drag_effect) { |
| - std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
| + std::unique_ptr<WebInputEvent> scaled_event = |
| + TransformScreenToWidgetCoordinates(unscaled_event); |
| const WebMouseEvent* event = |
| - scaled_event.get() ? static_cast<const WebMouseEvent*>(scaled_event.get()) |
| - : &unscaled_event; |
| + static_cast<const WebMouseEvent*>(scaled_event.get()); |
| WebPoint client_point(event->x, event->y); |
| WebPoint screen_point(event->globalX, event->globalY); |
| @@ -2697,10 +2698,9 @@ void EventSender::FinishDragAndDrop(const WebMouseEvent& unscaled_event, |
| } |
| 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; |
| + std::unique_ptr<WebInputEvent> scaled_event = |
| + TransformScreenToWidgetCoordinates(unscaled_event); |
| + const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get()); |
| last_click_time_sec_ = event->timeStampSeconds; |
| last_click_pos_ = current_pointer_state_[kRawMousePointerId].last_pos_; |
| @@ -2729,10 +2729,9 @@ void EventSender::DoDragAfterMouseMove(const WebMouseEvent& unscaled_event) { |
| return; |
| } |
| - std::unique_ptr<WebInputEvent> scaled_event = ScaleEvent(unscaled_event); |
| - const WebMouseEvent* event = |
| - scaled_event.get() ? static_cast<WebMouseEvent*>(scaled_event.get()) |
| - : &unscaled_event; |
| + std::unique_ptr<WebInputEvent> scaled_event = |
| + TransformScreenToWidgetCoordinates(unscaled_event); |
| + const WebMouseEvent* event = static_cast<WebMouseEvent*>(scaled_event.get()); |
| WebPoint client_point(event->x, event->y); |
| WebPoint screen_point(event->globalX, event->globalY); |
| @@ -2789,18 +2788,23 @@ void EventSender::ReplaySavedEvents() { |
| } |
| WebInputEventResult EventSender::HandleInputEventOnViewOrPopup( |
| - 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; |
| + const WebInputEvent& event) { |
| + last_event_timestamp_ = event.timeStampSeconds; |
| - if (WebPagePopup* popup = view()->pagePopup()) { |
| - if (!WebInputEvent::isKeyboardEventType(event->type)) |
| - return popup->handleInputEvent(*event); |
| + if (WebPagePopup* popup = widget()->pagePopup()) { |
| + // ui::ScaleWebInputEvent returns nullptr when the scale is 1.0f as the |
| + // event does not have to be converted. |
| + std::unique_ptr<WebInputEvent> scaled_event = |
| + ui::ScaleWebInputEvent(event, delegate()->GetWindowToViewportScale()); |
| + const WebInputEvent* popup_friendly_event = |
| + scaled_event.get() ? scaled_event.get() : &event; |
| + if (!WebInputEvent::isKeyboardEventType(popup_friendly_event->type)) |
| + return popup->handleInputEvent(*popup_friendly_event); |
| } |
| - return view()->handleInputEvent(*event); |
| + |
| + std::unique_ptr<WebInputEvent> widget_friendly_event = |
| + TransformScreenToWidgetCoordinates(event); |
| + return widget()->handleInputEvent(*widget_friendly_event); |
| } |
| void EventSender::SendGesturesForMouseWheelEvent( |
| @@ -2829,7 +2833,7 @@ void EventSender::SendGesturesForMouseWheelEvent( |
| } |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| HandleInputEventOnViewOrPopup(begin_event); |
| @@ -2845,7 +2849,7 @@ void EventSender::SendGesturesForMouseWheelEvent( |
| begin_event.data.scrollBegin.deltaHintUnits; |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| HandleInputEventOnViewOrPopup(update_event); |
| WebGestureEvent end_event; |
| @@ -2856,31 +2860,35 @@ void EventSender::SendGesturesForMouseWheelEvent( |
| begin_event.data.scrollBegin.deltaHintUnits; |
| if (force_layout_on_events_) |
| - view()->updateAllLifecyclePhases(); |
| + widget()->updateAllLifecyclePhases(); |
| HandleInputEventOnViewOrPopup(end_event); |
| } |
| TestInterfaces* EventSender::interfaces() { |
| - return web_view_test_proxy_base_->test_interfaces(); |
| + return web_widget_test_proxy_base_->web_view_test_proxy_base() |
| + ->test_interfaces(); |
| } |
| WebTestDelegate* EventSender::delegate() { |
| - return web_view_test_proxy_base_->delegate(); |
| + return web_widget_test_proxy_base_->web_view_test_proxy_base()->delegate(); |
| } |
| const blink::WebView* EventSender::view() const { |
| - return web_view_test_proxy_base_->web_view(); |
| + return web_widget_test_proxy_base_->web_view_test_proxy_base()->web_view(); |
| } |
| blink::WebView* EventSender::view() { |
| - return web_view_test_proxy_base_->web_view(); |
| + return web_widget_test_proxy_base_->web_view_test_proxy_base()->web_view(); |
| +} |
| + |
| +blink::WebWidget* EventSender::widget() { |
| + return web_widget_test_proxy_base_->web_widget(); |
| } |
| -std::unique_ptr<WebInputEvent> EventSender::ScaleEvent( |
| +std::unique_ptr<WebInputEvent> EventSender::TransformScreenToWidgetCoordinates( |
| 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()); |
| + return delegate()->TransformScreenToWidgetCoordinates( |
| + web_widget_test_proxy_base_, event); |
| } |
| } // namespace test_runner |