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

Unified Diff: content/browser/renderer_host/render_widget_host_view_event_handler.cc

Issue 2914393002: Adding phase info to wheel events migrated to wheel phase handler class. (Closed)
Patch Set: fixed mouse_wheel_phase_handler_path in rwhv_mac Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_event_handler.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_event_handler.cc b/content/browser/renderer_host/render_widget_host_view_event_handler.cc
index f0c1e1cbb08940c969609a249cd5d1efebbe7c67..ed128faffcab1e39cf916fe43dfbde8ed882fcf8 100644
--- a/content/browser/renderer_host/render_widget_host_view_event_handler.cc
+++ b/content/browser/renderer_host/render_widget_host_view_event_handler.cc
@@ -138,7 +138,8 @@ RenderWidgetHostViewEventHandler::RenderWidgetHostViewEventHandler(
popup_child_host_view_(nullptr),
popup_child_event_handler_(nullptr),
delegate_(delegate),
- window_(nullptr) {}
+ window_(nullptr),
+ mouse_wheel_phase_handler_(host, host_view) {}
RenderWidgetHostViewEventHandler::~RenderWidgetHostViewEventHandler() {}
@@ -341,7 +342,8 @@ void RenderWidgetHostViewEventHandler::OnMouseEvent(ui::MouseEvent* event) {
if (mouse_wheel_event.delta_x != 0 || mouse_wheel_event.delta_y != 0) {
bool should_route_event = ShouldRouteEvent(event);
if (host_view_->wheel_scroll_latching_enabled())
- AddPhaseAndScheduleEndEvent(mouse_wheel_event, should_route_event);
+ mouse_wheel_phase_handler_.AddPhaseIfNeededAndScheduleEndEvent(
+ mouse_wheel_event, should_route_event);
if (should_route_event) {
host_->delegate()->GetInputEventRouter()->RouteMouseWheelEvent(
host_view_, &mouse_wheel_event, *event->latency());
@@ -410,7 +412,8 @@ void RenderWidgetHostViewEventHandler::OnScrollEvent(ui::ScrollEvent* event) {
blink::WebMouseWheelEvent mouse_wheel_event = ui::MakeWebMouseWheelEvent(
*event, base::Bind(&GetScreenLocationFromEvent));
if (host_view_->wheel_scroll_latching_enabled())
- AddPhaseAndScheduleEndEvent(mouse_wheel_event, should_route_event);
+ mouse_wheel_phase_handler_.AddPhaseIfNeededAndScheduleEndEvent(
+ mouse_wheel_event, should_route_event);
if (should_route_event) {
host_->delegate()->GetInputEventRouter()->RouteGestureEvent(
host_view_, &gesture_event,
@@ -435,9 +438,9 @@ void RenderWidgetHostViewEventHandler::OnScrollEvent(ui::ScrollEvent* event) {
}
if (event->type() == ui::ET_SCROLL_FLING_START) {
RecordAction(base::UserMetricsAction("TrackpadScrollFling"));
- // Stop the timer to avoid sending a synthetic wheel event with
- // kPhaseEnded.
- mouse_wheel_end_dispatch_timer_.Stop();
+ // Ignore the pending wheel end event to avoid sending a wheel event with
+ // kPhaseEnded before a GFS.
+ mouse_wheel_phase_handler_.IgnorePendingWheelEndEvent();
}
}
@@ -532,20 +535,15 @@ void RenderWidgetHostViewEventHandler::OnGestureEvent(ui::GestureEvent* event) {
if (gesture.GetType() != blink::WebInputEvent::kUndefined) {
if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN) {
RecordAction(base::UserMetricsAction("TouchscreenScroll"));
-
- if (mouse_wheel_end_dispatch_timer_.IsRunning()) {
- // If there is a current scroll going on and a new scroll that isn't
- // wheel based send a synthetic wheel event with kPhaseEnded to cancel
- // the current scroll.
- base::Closure task = mouse_wheel_end_dispatch_timer_.user_task();
- mouse_wheel_end_dispatch_timer_.Stop();
- task.Run();
- }
+ // If there is a current scroll going on and a new scroll that isn't
+ // wheel based send a synthetic wheel event with kPhaseEnded to cancel
+ // the current scroll.
+ mouse_wheel_phase_handler_.DispatchPendingWheelEndEvent();
} else if (event->type() == ui::ET_GESTURE_SCROLL_END) {
// Make sure that the next wheel event will have phase = |kPhaseBegan|.
// This is for maintaining the correct phase info when some of the wheel
// events get ignored while a touchscreen scroll is going on.
- mouse_wheel_end_dispatch_timer_.Stop();
+ mouse_wheel_phase_handler_.IgnorePendingWheelEndEvent();
} else if (event->type() == ui::ET_SCROLL_FLING_START) {
RecordAction(base::UserMetricsAction("TouchscreenScrollFling"));
}
@@ -911,51 +909,4 @@ void RenderWidgetHostViewEventHandler::ProcessTouchEvent(
host_->ForwardTouchEventWithLatencyInfo(event, latency);
}
-void RenderWidgetHostViewEventHandler::SendSyntheticWheelEventWithPhaseEnded(
- blink::WebMouseWheelEvent last_mouse_wheel_event,
- bool should_route_event) {
- DCHECK(host_view_->wheel_scroll_latching_enabled());
- blink::WebMouseWheelEvent mouse_wheel_event = last_mouse_wheel_event;
- mouse_wheel_event.delta_x = 0;
- mouse_wheel_event.delta_y = 0;
- mouse_wheel_event.phase = blink::WebMouseWheelEvent::kPhaseEnded;
- mouse_wheel_event.dispatch_type =
- blink::WebInputEvent::DispatchType::kEventNonBlocking;
- if (should_route_event) {
- host_->delegate()->GetInputEventRouter()->RouteMouseWheelEvent(
- host_view_, &mouse_wheel_event,
- ui::LatencyInfo(ui::SourceEventType::WHEEL));
- } else {
- ProcessMouseWheelEvent(mouse_wheel_event,
- ui::LatencyInfo(ui::SourceEventType::WHEEL));
- }
-}
-
-void RenderWidgetHostViewEventHandler::AddPhaseAndScheduleEndEvent(
- blink::WebMouseWheelEvent& mouse_wheel_event,
- bool should_route_event) {
- DCHECK_EQ(blink::WebMouseWheelEvent::kPhaseNone, mouse_wheel_event.phase);
- DCHECK_EQ(blink::WebMouseWheelEvent::kPhaseNone,
- mouse_wheel_event.momentum_phase);
-
- if (!mouse_wheel_end_dispatch_timer_.IsRunning()) {
- mouse_wheel_event.phase = blink::WebMouseWheelEvent::kPhaseBegan;
- mouse_wheel_end_dispatch_timer_.Start(
- FROM_HERE,
- base::TimeDelta::FromMilliseconds(
- kDefaultMouseWheelLatchingTransactionMs),
- base::Bind(&RenderWidgetHostViewEventHandler::
- SendSyntheticWheelEventWithPhaseEnded,
- base::Unretained(this), mouse_wheel_event,
- should_route_event));
- } else {
- bool non_zero_delta =
- mouse_wheel_event.delta_x || mouse_wheel_event.delta_y;
- mouse_wheel_event.phase = non_zero_delta
- ? blink::WebMouseWheelEvent::kPhaseChanged
- : blink::WebMouseWheelEvent::kPhaseStationary;
- mouse_wheel_end_dispatch_timer_.Reset();
- }
-}
-
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698