[email protected] | 7a72d45 | 2013-12-13 10:01:13 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | 7a72d45 | 2013-12-13 10:01:13 | [diff] [blame] | 5 | #include "content/renderer/input/input_handler_wrapper.h" |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 6 | |
khushalsagar | 3a8d056 | 2015-11-23 22:50:36 | [diff] [blame] | 7 | #include "base/command_line.h" |
skyostil | 2d3b5bd | 2015-05-27 15:40:59 | [diff] [blame] | 8 | #include "base/location.h" |
sahel | 4ced61f | 2017-01-12 19:54:05 | [diff] [blame] | 9 | #include "content/public/common/content_features.h" |
khushalsagar | 3a8d056 | 2015-11-23 22:50:36 | [diff] [blame] | 10 | #include "content/public/common/content_switches.h" |
[email protected] | 7a72d45 | 2013-12-13 10:01:13 | [diff] [blame] | 11 | #include "content/renderer/input/input_event_filter.h" |
| 12 | #include "content/renderer/input/input_handler_manager.h" |
[email protected] | 5c30b5e0 | 2013-05-30 03:46:08 | [diff] [blame] | 13 | #include "third_party/WebKit/public/platform/Platform.h" |
chongz | a8ba91fc | 2016-08-16 21:39:17 | [diff] [blame] | 14 | #include "ui/events/blink/did_overscroll_params.h" |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 15 | |
| 16 | namespace content { |
| 17 | |
| 18 | InputHandlerWrapper::InputHandlerWrapper( |
| 19 | InputHandlerManager* input_handler_manager, |
| 20 | int routing_id, |
skyostil | 2d3b5bd | 2015-05-27 15:40:59 | [diff] [blame] | 21 | const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 22 | const base::WeakPtr<cc::InputHandler>& input_handler, |
wjmaclean | 1d97062 | 2017-01-21 22:28:24 | [diff] [blame] | 23 | const base::WeakPtr<RenderWidget>& render_widget, |
dtapuska | e7dd21de | 2016-06-09 13:41:56 | [diff] [blame] | 24 | bool enable_smooth_scrolling) |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 25 | : input_handler_manager_(input_handler_manager), |
| 26 | routing_id_(routing_id), |
sahel | 91251b3 | 2017-04-06 16:55:17 | [diff] [blame] | 27 | input_handler_proxy_(input_handler.get(), |
| 28 | this, |
| 29 | base::FeatureList::IsEnabled( |
| 30 | features::kTouchpadAndWheelScrollLatching)), |
skyostil | 2d3b5bd | 2015-05-27 15:40:59 | [diff] [blame] | 31 | main_task_runner_(main_task_runner), |
wjmaclean | 1d97062 | 2017-01-21 22:28:24 | [diff] [blame] | 32 | render_widget_(render_widget) { |
[email protected] | 6ac2fff | 2013-12-10 07:54:04 | [diff] [blame] | 33 | DCHECK(input_handler); |
ymalik | fb8b964 | 2016-01-12 05:24:22 | [diff] [blame] | 34 | input_handler_proxy_.set_smooth_scroll_enabled(enable_smooth_scrolling); |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 35 | } |
| 36 | |
| 37 | InputHandlerWrapper::~InputHandlerWrapper() { |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 38 | } |
| 39 | |
dtapuska | 3d5624d3 | 2016-08-30 04:34:00 | [diff] [blame] | 40 | void InputHandlerWrapper::NeedsMainFrame() { |
| 41 | main_task_runner_->PostTask( |
| 42 | FROM_HERE, |
wjmaclean | 1d97062 | 2017-01-21 22:28:24 | [diff] [blame] | 43 | base::Bind(&RenderWidget::SetNeedsMainFrame, render_widget_)); |
dtapuska | 3d5624d3 | 2016-08-30 04:34:00 | [diff] [blame] | 44 | } |
| 45 | |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 46 | void InputHandlerWrapper::TransferActiveWheelFlingAnimation( |
[email protected] | 180ef24 | 2013-11-07 06:50:46 | [diff] [blame] | 47 | const blink::WebActiveWheelFlingParameters& params) { |
skyostil | 2d3b5bd | 2015-05-27 15:40:59 | [diff] [blame] | 48 | main_task_runner_->PostTask( |
wjmaclean | 1d97062 | 2017-01-21 22:28:24 | [diff] [blame] | 49 | FROM_HERE, base::Bind(&RenderWidget::TransferActiveWheelFlingAnimation, |
| 50 | render_widget_, params)); |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 51 | } |
| 52 | |
dtapuska | 1bcb284c4 | 2016-09-20 22:12:48 | [diff] [blame] | 53 | void InputHandlerWrapper::DispatchNonBlockingEventToMainThread( |
jam | 013b74c8 | 2017-02-10 16:36:10 | [diff] [blame] | 54 | ui::WebScopedInputEvent event, |
dtapuska | 1bcb284c4 | 2016-09-20 22:12:48 | [diff] [blame] | 55 | const ui::LatencyInfo& latency_info) { |
| 56 | input_handler_manager_->DispatchNonBlockingEventToMainThread( |
| 57 | routing_id_, std::move(event), latency_info); |
| 58 | } |
| 59 | |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 60 | void InputHandlerWrapper::WillShutdown() { |
| 61 | input_handler_manager_->RemoveInputHandler(routing_id_); |
| 62 | } |
| 63 | |
altimin | eb6bd196 | 2017-05-03 14:52:38 | [diff] [blame] | 64 | std::unique_ptr<blink::WebGestureCurve> |
| 65 | InputHandlerWrapper::CreateFlingAnimationCurve( |
[email protected] | 8ec812e3 | 2014-06-03 21:53:33 | [diff] [blame] | 66 | blink::WebGestureDevice deviceSource, |
[email protected] | 180ef24 | 2013-11-07 06:50:46 | [diff] [blame] | 67 | const blink::WebFloatPoint& velocity, |
| 68 | const blink::WebSize& cumulative_scroll) { |
Blink Reformat | 1c4d759e | 2017-04-09 16:34:54 | [diff] [blame] | 69 | return blink::Platform::Current()->CreateFlingAnimationCurve( |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 70 | deviceSource, velocity, cumulative_scroll); |
| 71 | } |
| 72 | |
khushalsagar | 3a8d056 | 2015-11-23 22:50:36 | [diff] [blame] | 73 | void InputHandlerWrapper::DidOverscroll( |
| 74 | const gfx::Vector2dF& accumulated_overscroll, |
| 75 | const gfx::Vector2dF& latest_overscroll_delta, |
| 76 | const gfx::Vector2dF& current_fling_velocity, |
| 77 | const gfx::PointF& causal_event_viewport_point) { |
chongz | a8ba91fc | 2016-08-16 21:39:17 | [diff] [blame] | 78 | ui::DidOverscrollParams params; |
khushalsagar | 3a8d056 | 2015-11-23 22:50:36 | [diff] [blame] | 79 | params.accumulated_overscroll = accumulated_overscroll; |
| 80 | params.latest_overscroll_delta = latest_overscroll_delta; |
| 81 | params.current_fling_velocity = current_fling_velocity; |
| 82 | params.causal_event_viewport_point = causal_event_viewport_point; |
[email protected] | bfb6e24 | 2013-07-17 23:15:11 | [diff] [blame] | 83 | input_handler_manager_->DidOverscroll(routing_id_, params); |
[email protected] | a2b5ded | 2013-05-20 21:32:53 | [diff] [blame] | 84 | } |
| 85 | |
[email protected] | 5f7d911 | 2014-01-17 21:31:42 | [diff] [blame] | 86 | void InputHandlerWrapper::DidStopFlinging() { |
| 87 | input_handler_manager_->DidStopFlinging(routing_id_); |
| 88 | } |
| 89 | |
alexclarke | 3722366b | 2014-11-11 09:52:22 | [diff] [blame] | 90 | void InputHandlerWrapper::DidAnimateForInput() { |
| 91 | input_handler_manager_->DidAnimateForInput(); |
alexclarke | 1ec1dbc | 2014-09-12 11:23:30 | [diff] [blame] | 92 | } |
| 93 | |
sahel | 42f43cb | 2017-05-11 17:58:31 | [diff] [blame] | 94 | void InputHandlerWrapper::GenerateScrollBeginAndSendToMainThread( |
| 95 | const blink::WebGestureEvent& update_event) { |
| 96 | DCHECK_EQ(update_event.GetType(), blink::WebInputEvent::kGestureScrollUpdate); |
| 97 | blink::WebGestureEvent scroll_begin(update_event); |
| 98 | scroll_begin.SetType(blink::WebInputEvent::kGestureScrollBegin); |
| 99 | scroll_begin.data.scroll_begin.inertial_phase = |
| 100 | update_event.data.scroll_update.inertial_phase; |
| 101 | scroll_begin.data.scroll_begin.delta_x_hint = |
| 102 | update_event.data.scroll_update.delta_x; |
| 103 | scroll_begin.data.scroll_begin.delta_y_hint = |
| 104 | update_event.data.scroll_update.delta_y; |
| 105 | scroll_begin.data.scroll_begin.delta_hint_units = |
| 106 | update_event.data.scroll_update.delta_units; |
| 107 | |
| 108 | DispatchNonBlockingEventToMainThread( |
| 109 | ui::WebInputEventTraits::Clone(scroll_begin), ui::LatencyInfo()); |
| 110 | } |
| 111 | |
[email protected] | 200a9c06 | 2013-05-20 04:34:37 | [diff] [blame] | 112 | } // namespace content |