Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
index 8febafce8fcb01a69c1ffd41e1fd43f8aa180aff..925dbe1b20109ad3ce54fa1aa9902a1f2f72d467 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
@@ -440,6 +440,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, |
bool is_guest_view_hack) |
: render_widget_host_(RenderWidgetHostImpl::From(widget)), |
page_at_minimum_scale_(true), |
+ mouse_wheel_phase_handler_(RenderWidgetHostImpl::From(widget), this), |
is_loading_(false), |
allow_pause_for_resize_or_repaint_(true), |
is_guest_view_hack_(is_guest_view_hack), |
@@ -1753,50 +1754,6 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged( |
UpdateScreenInfo(cocoa_view_); |
} |
-void RenderWidgetHostViewMac::ScheduleMouseWheelEndDispatching( |
- blink::WebMouseWheelEvent wheel_event, |
- bool should_route_event) { |
- mouse_wheel_end_dispatch_timer_.Start( |
- FROM_HERE, |
- base::TimeDelta::FromMilliseconds( |
- kDefaultMouseWheelLatchingTransactionMs), |
- base::Bind( |
- &RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded, |
- base::Unretained(this), wheel_event, should_route_event)); |
-} |
- |
-void RenderWidgetHostViewMac::DispatchPendingWheelEndEvent() { |
- if (mouse_wheel_end_dispatch_timer_.IsRunning()) { |
- base::Closure task = mouse_wheel_end_dispatch_timer_.user_task(); |
- mouse_wheel_end_dispatch_timer_.Stop(); |
- task.Run(); |
- } |
-} |
- |
-void RenderWidgetHostViewMac::IgnorePendingWheelEndEvent() { |
- mouse_wheel_end_dispatch_timer_.Stop(); |
-} |
- |
-bool RenderWidgetHostViewMac::HasPendingWheelEndEvent() { |
- return mouse_wheel_end_dispatch_timer_.IsRunning(); |
-} |
- |
-void RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded( |
- blink::WebMouseWheelEvent wheel_event, |
- bool should_route_event) { |
- wheel_event.dispatch_type = |
- blink::WebInputEvent::DispatchType::kEventNonBlocking; |
- if (should_route_event) { |
- render_widget_host_->delegate() |
- ->GetInputEventRouter() |
- ->RouteMouseWheelEvent(this, &wheel_event, |
- ui::LatencyInfo(ui::SourceEventType::WHEEL)); |
- } else { |
- ProcessMouseWheelEvent(wheel_event, |
- ui::LatencyInfo(ui::SourceEventType::WHEEL)); |
- } |
-} |
- |
} // namespace content |
// RenderWidgetHostViewCocoa --------------------------------------------------- |
@@ -2398,7 +2355,8 @@ void RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded( |
event, self); |
webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent); |
if (renderWidgetHostView_->wheel_scroll_latching_enabled()) { |
- renderWidgetHostView_->ScheduleMouseWheelEndDispatching(webEvent, false); |
+ renderWidgetHostView_->mouse_wheel_phase_handler_ |
+ .AddPhaseIfNeededAndScheduleEndEvent(webEvent, false); |
} else { |
ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); |
latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
@@ -2611,25 +2569,15 @@ void RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded( |
ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); |
latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
if (renderWidgetHostView_->wheel_scroll_latching_enabled()) { |
+ renderWidgetHostView_->mouse_wheel_phase_handler_ |
+ .AddPhaseIfNeededAndScheduleEndEvent( |
+ webEvent, renderWidgetHostView_->ShouldRouteEvent(webEvent)); |
if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseEnded) { |
- // Don't send the wheel end event immediately, start a timer instead to |
- // see whether momentum phase of the scrolling starts or not. |
- renderWidgetHostView_->ScheduleMouseWheelEndDispatching( |
- webEvent, renderWidgetHostView_->ShouldRouteEvent(webEvent)); |
+ // A wheel end event is scheduled and will get dispatched if momentum |
+ // phase doesn't start in 100ms. Don't sent the wheel end event |
+ // immediately. |
return; |
} |
- if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseBegan) { |
- // A new scrolling sequence has started, send the pending wheel end |
- // event to end the previous scrolling sequence. |
- renderWidgetHostView_->DispatchPendingWheelEndEvent(); |
- |
- } else if (webEvent.momentum_phase == |
- blink::WebMouseWheelEvent::kPhaseBegan) { |
- // Momentum phase has started, drop the pending wheel end event to make |
- // sure that no wheel end event will be sent during the momentum phase |
- // of scrolling. |
- renderWidgetHostView_->IgnorePendingWheelEndEvent(); |
- } |
} |
if (renderWidgetHostView_->ShouldRouteEvent(webEvent)) { |