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

Side by Side Diff: content/renderer/input/input_handler_manager.cc

Issue 1631963002: Plumb firing passive event listeners. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_passive_listeners_2a
Patch Set: Fix last touch sequence start to be last touch start Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/input/input_handler_manager.h" 5 #include "content/renderer/input/input_handler_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 18 matching lines...) Expand all
29 29
30 InputEventAckState InputEventDispositionToAck( 30 InputEventAckState InputEventDispositionToAck(
31 InputHandlerProxy::EventDisposition disposition) { 31 InputHandlerProxy::EventDisposition disposition) {
32 switch (disposition) { 32 switch (disposition) {
33 case InputHandlerProxy::DID_HANDLE: 33 case InputHandlerProxy::DID_HANDLE:
34 return INPUT_EVENT_ACK_STATE_CONSUMED; 34 return INPUT_EVENT_ACK_STATE_CONSUMED;
35 case InputHandlerProxy::DID_NOT_HANDLE: 35 case InputHandlerProxy::DID_NOT_HANDLE:
36 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 36 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
37 case InputHandlerProxy::DROP_EVENT: 37 case InputHandlerProxy::DROP_EVENT:
38 return INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS; 38 return INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS;
39 case InputHandlerProxy::NON_BLOCKING:
40 return INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING;
39 } 41 }
40 NOTREACHED(); 42 NOTREACHED();
41 return INPUT_EVENT_ACK_STATE_UNKNOWN; 43 return INPUT_EVENT_ACK_STATE_UNKNOWN;
42 } 44 }
43 45
44 } // namespace 46 } // namespace
45 47
46 InputHandlerManager::InputHandlerManager( 48 InputHandlerManager::InputHandlerManager(
47 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 49 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
48 InputHandlerManagerClient* client, 50 InputHandlerManagerClient* client,
49 scheduler::RendererScheduler* renderer_scheduler) 51 scheduler::RendererScheduler* renderer_scheduler)
50 : task_runner_(task_runner), 52 : task_runner_(task_runner),
51 client_(client), 53 client_(client),
52 renderer_scheduler_(renderer_scheduler) { 54 renderer_scheduler_(renderer_scheduler) {
53 DCHECK(client_); 55 DCHECK(client_);
54 client_->SetBoundHandler(base::Bind(&InputHandlerManager::HandleInputEvent, 56 client_->SetBoundHandler(base::Bind(&InputHandlerManager::HandleInputEvent,
55 base::Unretained(this))); 57 base::Unretained(this)));
56 } 58 }
57 59
58 InputHandlerManager::~InputHandlerManager() { 60 InputHandlerManager::~InputHandlerManager() {
59 client_->SetBoundHandler(InputHandlerManagerClient::Handler()); 61 client_->SetBoundHandler(InputHandlerManagerClient::Handler());
60 } 62 }
61 63
62 void InputHandlerManager::AddInputHandler( 64 void InputHandlerManager::AddInputHandler(
63 int routing_id, 65 int routing_id,
64 const base::WeakPtr<cc::InputHandler>& input_handler, 66 const base::WeakPtr<cc::InputHandler>& input_handler,
65 const base::WeakPtr<RenderViewImpl>& render_view_impl, 67 const base::WeakPtr<RenderViewImpl>& render_view_impl,
66 bool enable_smooth_scrolling) { 68 bool enable_smooth_scrolling,
69 bool enable_wheel_gestures) {
67 if (task_runner_->BelongsToCurrentThread()) { 70 if (task_runner_->BelongsToCurrentThread()) {
68 AddInputHandlerOnCompositorThread(routing_id, 71 AddInputHandlerOnCompositorThread(
69 base::ThreadTaskRunnerHandle::Get(), 72 routing_id, base::ThreadTaskRunnerHandle::Get(), input_handler,
70 input_handler, render_view_impl, 73 render_view_impl, enable_smooth_scrolling, enable_wheel_gestures);
71 enable_smooth_scrolling);
72 } else { 74 } else {
73 task_runner_->PostTask( 75 task_runner_->PostTask(
74 FROM_HERE, 76 FROM_HERE,
75 base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread, 77 base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread,
76 base::Unretained(this), routing_id, 78 base::Unretained(this), routing_id,
77 base::ThreadTaskRunnerHandle::Get(), input_handler, 79 base::ThreadTaskRunnerHandle::Get(), input_handler,
78 render_view_impl, 80 render_view_impl, enable_smooth_scrolling,
79 enable_smooth_scrolling)); 81 enable_wheel_gestures));
80 } 82 }
81 } 83 }
82 84
83 void InputHandlerManager::AddInputHandlerOnCompositorThread( 85 void InputHandlerManager::AddInputHandlerOnCompositorThread(
84 int routing_id, 86 int routing_id,
85 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, 87 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner,
86 const base::WeakPtr<cc::InputHandler>& input_handler, 88 const base::WeakPtr<cc::InputHandler>& input_handler,
87 const base::WeakPtr<RenderViewImpl>& render_view_impl, 89 const base::WeakPtr<RenderViewImpl>& render_view_impl,
88 bool enable_smooth_scrolling) { 90 bool enable_smooth_scrolling,
91 bool enable_wheel_gestures) {
89 DCHECK(task_runner_->BelongsToCurrentThread()); 92 DCHECK(task_runner_->BelongsToCurrentThread());
90 93
91 // The handler could be gone by this point if the compositor has shut down. 94 // The handler could be gone by this point if the compositor has shut down.
92 if (!input_handler) 95 if (!input_handler)
93 return; 96 return;
94 97
95 // The same handler may be registered for a route multiple times. 98 // The same handler may be registered for a route multiple times.
96 if (input_handlers_.count(routing_id) != 0) 99 if (input_handlers_.count(routing_id) != 0)
97 return; 100 return;
98 101
99 TRACE_EVENT1("input", 102 TRACE_EVENT1("input",
100 "InputHandlerManager::AddInputHandlerOnCompositorThread", 103 "InputHandlerManager::AddInputHandlerOnCompositorThread",
101 "result", "AddingRoute"); 104 "result", "AddingRoute");
102 scoped_ptr<InputHandlerWrapper> wrapper(new InputHandlerWrapper( 105 scoped_ptr<InputHandlerWrapper> wrapper(new InputHandlerWrapper(
103 this, routing_id, main_task_runner, input_handler, render_view_impl, 106 this, routing_id, main_task_runner, input_handler, render_view_impl,
104 enable_smooth_scrolling)); 107 enable_smooth_scrolling, enable_wheel_gestures));
105 client_->DidAddInputHandler(routing_id, wrapper->input_handler_proxy()); 108 client_->DidAddInputHandler(routing_id, wrapper->input_handler_proxy());
106 input_handlers_.add(routing_id, std::move(wrapper)); 109 input_handlers_.add(routing_id, std::move(wrapper));
107 } 110 }
108 111
109 void InputHandlerManager::RemoveInputHandler(int routing_id) { 112 void InputHandlerManager::RemoveInputHandler(int routing_id) {
110 DCHECK(task_runner_->BelongsToCurrentThread()); 113 DCHECK(task_runner_->BelongsToCurrentThread());
111 DCHECK(input_handlers_.contains(routing_id)); 114 DCHECK(input_handlers_.contains(routing_id));
112 115
113 TRACE_EVENT0("input", "InputHandlerManager::RemoveInputHandler"); 116 TRACE_EVENT0("input", "InputHandlerManager::RemoveInputHandler");
114 117
(...skipping 19 matching lines...) Expand all
134 auto it = input_handlers_.find(routing_id); 137 auto it = input_handlers_.find(routing_id);
135 if (it == input_handlers_.end()) 138 if (it == input_handlers_.end())
136 return; 139 return;
137 140
138 InputHandlerProxy* proxy = it->second->input_handler_proxy(); 141 InputHandlerProxy* proxy = it->second->input_handler_proxy();
139 DCHECK(proxy->scroll_elasticity_controller()); 142 DCHECK(proxy->scroll_elasticity_controller());
140 proxy->scroll_elasticity_controller()->ObserveWheelEventAndResult( 143 proxy->scroll_elasticity_controller()->ObserveWheelEventAndResult(
141 wheel_event, scroll_result); 144 wheel_event, scroll_result);
142 } 145 }
143 146
147 void InputHandlerManager::NonBlockingInputEventHandledOnMainThread(
148 int routing_id,
149 blink::WebInputEvent::Type type) {
150 task_runner_->PostTask(
151 FROM_HERE,
152 base::Bind(
153 &InputHandlerManager::NonBlockingInputEventHandledOnCompositorThread,
154 base::Unretained(this), routing_id, type));
155 }
156
157 void InputHandlerManager::NonBlockingInputEventHandledOnCompositorThread(
158 int routing_id,
159 blink::WebInputEvent::Type handled_type) {
160 DCHECK(task_runner_->BelongsToCurrentThread());
161 auto it = input_handlers_.find(routing_id);
162 if (it == input_handlers_.end())
163 return;
164
165 client_->NonBlockingInputEventHandled(routing_id, handled_type);
166 }
167
144 InputEventAckState InputHandlerManager::HandleInputEvent( 168 InputEventAckState InputHandlerManager::HandleInputEvent(
145 int routing_id, 169 int routing_id,
146 const WebInputEvent* input_event, 170 const WebInputEvent* input_event,
147 ui::LatencyInfo* latency_info) { 171 ui::LatencyInfo* latency_info) {
148 DCHECK(task_runner_->BelongsToCurrentThread()); 172 DCHECK(task_runner_->BelongsToCurrentThread());
149 TRACE_EVENT1("input,benchmark", "InputHandlerManager::HandleInputEvent", 173 TRACE_EVENT1("input,benchmark", "InputHandlerManager::HandleInputEvent",
150 "type", WebInputEventTraits::GetName(input_event->type)); 174 "type", WebInputEventTraits::GetName(input_event->type));
151 175
152 auto it = input_handlers_.find(routing_id); 176 auto it = input_handlers_.find(routing_id);
153 if (it == input_handlers_.end()) { 177 if (it == input_handlers_.end()) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 210
187 void InputHandlerManager::DidStopFlinging(int routing_id) { 211 void InputHandlerManager::DidStopFlinging(int routing_id) {
188 client_->DidStopFlinging(routing_id); 212 client_->DidStopFlinging(routing_id);
189 } 213 }
190 214
191 void InputHandlerManager::DidAnimateForInput() { 215 void InputHandlerManager::DidAnimateForInput() {
192 renderer_scheduler_->DidAnimateForInputOnCompositorThread(); 216 renderer_scheduler_->DidAnimateForInputOnCompositorThread();
193 } 217 }
194 218
195 } // namespace content 219 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698