blob: 1605e408db006e18080cecf5603a5f2c8a1cbd93 [file] [log] [blame]
[email protected]7a72d452013-12-13 10:01:131// Copyright 2013 The Chromium Authors. All rights reserved.
[email protected]200a9c062013-05-20 04:34:372// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]7a72d452013-12-13 10:01:135#include "content/renderer/input/input_handler_wrapper.h"
[email protected]200a9c062013-05-20 04:34:376
khushalsagar3a8d0562015-11-23 22:50:367#include "base/command_line.h"
skyostil2d3b5bd2015-05-27 15:40:598#include "base/location.h"
sahel4ced61f2017-01-12 19:54:059#include "content/public/common/content_features.h"
khushalsagar3a8d0562015-11-23 22:50:3610#include "content/public/common/content_switches.h"
[email protected]7a72d452013-12-13 10:01:1311#include "content/renderer/input/input_event_filter.h"
12#include "content/renderer/input/input_handler_manager.h"
[email protected]5c30b5e02013-05-30 03:46:0813#include "third_party/WebKit/public/platform/Platform.h"
chongza8ba91fc2016-08-16 21:39:1714#include "ui/events/blink/did_overscroll_params.h"
[email protected]200a9c062013-05-20 04:34:3715
16namespace content {
17
18InputHandlerWrapper::InputHandlerWrapper(
19 InputHandlerManager* input_handler_manager,
20 int routing_id,
skyostil2d3b5bd2015-05-27 15:40:5921 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner,
[email protected]200a9c062013-05-20 04:34:3722 const base::WeakPtr<cc::InputHandler>& input_handler,
wjmaclean1d970622017-01-21 22:28:2423 const base::WeakPtr<RenderWidget>& render_widget,
dtapuskae7dd21de2016-06-09 13:41:5624 bool enable_smooth_scrolling)
[email protected]200a9c062013-05-20 04:34:3725 : input_handler_manager_(input_handler_manager),
26 routing_id_(routing_id),
sahel91251b32017-04-06 16:55:1727 input_handler_proxy_(input_handler.get(),
28 this,
29 base::FeatureList::IsEnabled(
30 features::kTouchpadAndWheelScrollLatching)),
skyostil2d3b5bd2015-05-27 15:40:5931 main_task_runner_(main_task_runner),
wjmaclean1d970622017-01-21 22:28:2432 render_widget_(render_widget) {
[email protected]6ac2fff2013-12-10 07:54:0433 DCHECK(input_handler);
ymalikfb8b9642016-01-12 05:24:2234 input_handler_proxy_.set_smooth_scroll_enabled(enable_smooth_scrolling);
[email protected]200a9c062013-05-20 04:34:3735}
36
37InputHandlerWrapper::~InputHandlerWrapper() {
[email protected]200a9c062013-05-20 04:34:3738}
39
dtapuska3d5624d32016-08-30 04:34:0040void InputHandlerWrapper::NeedsMainFrame() {
41 main_task_runner_->PostTask(
42 FROM_HERE,
wjmaclean1d970622017-01-21 22:28:2443 base::Bind(&RenderWidget::SetNeedsMainFrame, render_widget_));
dtapuska3d5624d32016-08-30 04:34:0044}
45
[email protected]200a9c062013-05-20 04:34:3746void InputHandlerWrapper::TransferActiveWheelFlingAnimation(
[email protected]180ef242013-11-07 06:50:4647 const blink::WebActiveWheelFlingParameters& params) {
skyostil2d3b5bd2015-05-27 15:40:5948 main_task_runner_->PostTask(
wjmaclean1d970622017-01-21 22:28:2449 FROM_HERE, base::Bind(&RenderWidget::TransferActiveWheelFlingAnimation,
50 render_widget_, params));
[email protected]200a9c062013-05-20 04:34:3751}
52
dtapuska1bcb284c42016-09-20 22:12:4853void InputHandlerWrapper::DispatchNonBlockingEventToMainThread(
jam013b74c82017-02-10 16:36:1054 ui::WebScopedInputEvent event,
dtapuska1bcb284c42016-09-20 22:12:4855 const ui::LatencyInfo& latency_info) {
56 input_handler_manager_->DispatchNonBlockingEventToMainThread(
57 routing_id_, std::move(event), latency_info);
58}
59
[email protected]200a9c062013-05-20 04:34:3760void InputHandlerWrapper::WillShutdown() {
61 input_handler_manager_->RemoveInputHandler(routing_id_);
62}
63
altimineb6bd1962017-05-03 14:52:3864std::unique_ptr<blink::WebGestureCurve>
65InputHandlerWrapper::CreateFlingAnimationCurve(
[email protected]8ec812e32014-06-03 21:53:3366 blink::WebGestureDevice deviceSource,
[email protected]180ef242013-11-07 06:50:4667 const blink::WebFloatPoint& velocity,
68 const blink::WebSize& cumulative_scroll) {
Blink Reformat1c4d759e2017-04-09 16:34:5469 return blink::Platform::Current()->CreateFlingAnimationCurve(
[email protected]200a9c062013-05-20 04:34:3770 deviceSource, velocity, cumulative_scroll);
71}
72
khushalsagar3a8d0562015-11-23 22:50:3673void 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) {
chongza8ba91fc2016-08-16 21:39:1778 ui::DidOverscrollParams params;
khushalsagar3a8d0562015-11-23 22:50:3679 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]bfb6e242013-07-17 23:15:1183 input_handler_manager_->DidOverscroll(routing_id_, params);
[email protected]a2b5ded2013-05-20 21:32:5384}
85
[email protected]5f7d9112014-01-17 21:31:4286void InputHandlerWrapper::DidStopFlinging() {
87 input_handler_manager_->DidStopFlinging(routing_id_);
88}
89
alexclarke3722366b2014-11-11 09:52:2290void InputHandlerWrapper::DidAnimateForInput() {
91 input_handler_manager_->DidAnimateForInput();
alexclarke1ec1dbc2014-09-12 11:23:3092}
93
sahel42f43cb2017-05-11 17:58:3194void 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]200a9c062013-05-20 04:34:37112} // namespace content