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

Unified 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, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698