OLD | NEW |
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 #ifndef UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ | 5 #ifndef UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ |
6 #define UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ | 6 #define UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "cc/input/input_handler.h" | 12 #include "cc/input/input_handler.h" |
13 #include "third_party/WebKit/public/platform/WebGestureCurve.h" | 13 #include "third_party/WebKit/public/platform/WebGestureCurve.h" |
14 #include "third_party/WebKit/public/platform/WebGestureCurveTarget.h" | 14 #include "third_party/WebKit/public/platform/WebGestureCurveTarget.h" |
15 #include "third_party/WebKit/public/platform/WebGestureEvent.h" | 15 #include "third_party/WebKit/public/platform/WebGestureEvent.h" |
16 #include "third_party/WebKit/public/platform/WebInputEvent.h" | 16 #include "third_party/WebKit/public/platform/WebInputEvent.h" |
17 #include "third_party/WebKit/public/web/WebActiveWheelFlingParameters.h" | 17 #include "third_party/WebKit/public/web/WebActiveWheelFlingParameters.h" |
| 18 #include "ui/events/blink/blink_features.h" |
18 #include "ui/events/blink/input_scroll_elasticity_controller.h" | 19 #include "ui/events/blink/input_scroll_elasticity_controller.h" |
19 #include "ui/events/blink/scoped_web_input_event.h" | 20 #include "ui/events/blink/scoped_web_input_event.h" |
20 #include "ui/events/blink/synchronous_input_handler_proxy.h" | 21 #include "ui/events/blink/synchronous_input_handler_proxy.h" |
21 | 22 |
| 23 namespace base { |
| 24 class TickClock; |
| 25 } |
| 26 |
22 namespace ui { | 27 namespace ui { |
23 | 28 |
24 namespace test { | 29 namespace test { |
25 class InputHandlerProxyTest; | 30 class InputHandlerProxyTest; |
| 31 class InputHandlerProxyEventQueueTest; |
26 } | 32 } |
27 | 33 |
| 34 class CompositorThreadEventQueue; |
| 35 class EventWithCallback; |
28 class InputHandlerProxyClient; | 36 class InputHandlerProxyClient; |
29 class InputScrollElasticityController; | 37 class InputScrollElasticityController; |
30 class SynchronousInputHandler; | 38 class SynchronousInputHandler; |
31 class SynchronousInputHandlerProxy; | 39 class SynchronousInputHandlerProxy; |
32 struct DidOverscrollParams; | 40 struct DidOverscrollParams; |
33 | 41 |
34 // This class is a proxy between the blink web input events for a WebWidget and | 42 // This class is a proxy between the blink web input events for a WebWidget and |
35 // the compositor's input handling logic. InputHandlerProxy instances live | 43 // the compositor's input handling logic. InputHandlerProxy instances live |
36 // entirely on the compositor thread. Each InputHandler instance handles input | 44 // entirely on the compositor thread. Each InputHandler instance handles input |
37 // events intended for a specific WebWidget. | 45 // events intended for a specific WebWidget. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 void Animate(base::TimeTicks time) override; | 82 void Animate(base::TimeTicks time) override; |
75 void MainThreadHasStoppedFlinging() override; | 83 void MainThreadHasStoppedFlinging() override; |
76 void ReconcileElasticOverscrollAndRootScroll() override; | 84 void ReconcileElasticOverscrollAndRootScroll() override; |
77 void UpdateRootLayerStateForSynchronousInputHandler( | 85 void UpdateRootLayerStateForSynchronousInputHandler( |
78 const gfx::ScrollOffset& total_scroll_offset, | 86 const gfx::ScrollOffset& total_scroll_offset, |
79 const gfx::ScrollOffset& max_scroll_offset, | 87 const gfx::ScrollOffset& max_scroll_offset, |
80 const gfx::SizeF& scrollable_size, | 88 const gfx::SizeF& scrollable_size, |
81 float page_scale_factor, | 89 float page_scale_factor, |
82 float min_page_scale_factor, | 90 float min_page_scale_factor, |
83 float max_page_scale_factor) override; | 91 float max_page_scale_factor) override; |
| 92 void DeliverInputForBeginFrame() override; |
84 | 93 |
85 // SynchronousInputHandlerProxy implementation. | 94 // SynchronousInputHandlerProxy implementation. |
86 void SetOnlySynchronouslyAnimateRootFlings( | 95 void SetOnlySynchronouslyAnimateRootFlings( |
87 SynchronousInputHandler* synchronous_input_handler) override; | 96 SynchronousInputHandler* synchronous_input_handler) override; |
88 void SynchronouslyAnimate(base::TimeTicks time) override; | 97 void SynchronouslyAnimate(base::TimeTicks time) override; |
89 void SynchronouslySetRootScrollOffset( | 98 void SynchronouslySetRootScrollOffset( |
90 const gfx::ScrollOffset& root_offset) override; | 99 const gfx::ScrollOffset& root_offset) override; |
91 void SynchronouslyZoomBy(float magnify_delta, | 100 void SynchronouslyZoomBy(float magnify_delta, |
92 const gfx::Point& anchor) override; | 101 const gfx::Point& anchor) override; |
93 | 102 |
94 // blink::WebGestureCurveTarget implementation. | 103 // blink::WebGestureCurveTarget implementation. |
95 bool scrollBy(const blink::WebFloatSize& offset, | 104 bool scrollBy(const blink::WebFloatSize& offset, |
96 const blink::WebFloatSize& velocity) override; | 105 const blink::WebFloatSize& velocity) override; |
97 | 106 |
98 bool gesture_scroll_on_impl_thread_for_testing() const { | 107 bool gesture_scroll_on_impl_thread_for_testing() const { |
99 return gesture_scroll_on_impl_thread_; | 108 return gesture_scroll_on_impl_thread_; |
100 } | 109 } |
101 | 110 |
102 protected: | 111 protected: |
103 void RecordMainThreadScrollingReasons(blink::WebGestureDevice device, | 112 void RecordMainThreadScrollingReasons(blink::WebGestureDevice device, |
104 uint32_t reasons); | 113 uint32_t reasons); |
105 | 114 |
106 private: | 115 private: |
107 friend class test::InputHandlerProxyTest; | 116 friend class test::InputHandlerProxyTest; |
| 117 friend class test::InputHandlerProxyEventQueueTest; |
| 118 |
| 119 void DispatchSingleInputEvent(std::unique_ptr<EventWithCallback>, |
| 120 const base::TimeTicks); |
| 121 void DispatchQueuedInputEvents(); |
108 | 122 |
109 // Helper functions for handling more complicated input events. | 123 // Helper functions for handling more complicated input events. |
110 EventDisposition HandleMouseWheel( | 124 EventDisposition HandleMouseWheel( |
111 const blink::WebMouseWheelEvent& event); | 125 const blink::WebMouseWheelEvent& event); |
112 EventDisposition ScrollByMouseWheel( | 126 EventDisposition ScrollByMouseWheel( |
113 const blink::WebMouseWheelEvent& event, | 127 const blink::WebMouseWheelEvent& event, |
114 cc::EventListenerProperties listener_properties); | 128 cc::EventListenerProperties listener_properties); |
115 EventDisposition HandleGestureScrollBegin( | 129 EventDisposition HandleGestureScrollBegin( |
116 const blink::WebGestureEvent& event); | 130 const blink::WebGestureEvent& event); |
117 EventDisposition HandleGestureScrollUpdate( | 131 EventDisposition HandleGestureScrollUpdate( |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 bool bundle_overscroll_params_with_ack); | 170 bool bundle_overscroll_params_with_ack); |
157 | 171 |
158 // Whether to use a smooth scroll animation for this event. | 172 // Whether to use a smooth scroll animation for this event. |
159 bool ShouldAnimate(bool has_precise_scroll_deltas) const; | 173 bool ShouldAnimate(bool has_precise_scroll_deltas) const; |
160 | 174 |
161 // Update the elastic overscroll controller with |gesture_event|. | 175 // Update the elastic overscroll controller with |gesture_event|. |
162 void HandleScrollElasticityOverscroll( | 176 void HandleScrollElasticityOverscroll( |
163 const blink::WebGestureEvent& gesture_event, | 177 const blink::WebGestureEvent& gesture_event, |
164 const cc::InputHandlerScrollResult& scroll_result); | 178 const cc::InputHandlerScrollResult& scroll_result); |
165 | 179 |
| 180 void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock); |
| 181 |
166 std::unique_ptr<blink::WebGestureCurve> fling_curve_; | 182 std::unique_ptr<blink::WebGestureCurve> fling_curve_; |
167 // Parameters for the active fling animation, stored in case we need to | 183 // Parameters for the active fling animation, stored in case we need to |
168 // transfer it out later. | 184 // transfer it out later. |
169 blink::WebActiveWheelFlingParameters fling_parameters_; | 185 blink::WebActiveWheelFlingParameters fling_parameters_; |
170 | 186 |
171 InputHandlerProxyClient* client_; | 187 InputHandlerProxyClient* client_; |
172 cc::InputHandler* input_handler_; | 188 cc::InputHandler* input_handler_; |
173 | 189 |
174 // Time at which an active fling should expire due to a deferred cancellation | 190 // Time at which an active fling should expire due to a deferred cancellation |
175 // event. A call to |Animate()| after this time will end the fling. | 191 // event. A call to |Animate()| after this time will end the fling. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 int32_t touch_start_result_; | 238 int32_t touch_start_result_; |
223 | 239 |
224 base::TimeTicks last_fling_animate_time_; | 240 base::TimeTicks last_fling_animate_time_; |
225 | 241 |
226 // Used to record overscroll notifications while an event is being | 242 // Used to record overscroll notifications while an event is being |
227 // dispatched. If the event causes overscroll, the overscroll metadata can be | 243 // dispatched. If the event causes overscroll, the overscroll metadata can be |
228 // bundled in the event ack, saving an IPC. Note that we must continue | 244 // bundled in the event ack, saving an IPC. Note that we must continue |
229 // supporting overscroll IPC notifications due to fling animation updates. | 245 // supporting overscroll IPC notifications due to fling animation updates. |
230 std::unique_ptr<DidOverscrollParams> current_overscroll_params_; | 246 std::unique_ptr<DidOverscrollParams> current_overscroll_params_; |
231 | 247 |
| 248 std::unique_ptr<CompositorThreadEventQueue> compositor_event_queue_; |
| 249 bool has_ongoing_compositor_scroll_pinch_; |
| 250 |
| 251 std::unique_ptr<base::TickClock> tick_clock_; |
| 252 |
232 DISALLOW_COPY_AND_ASSIGN(InputHandlerProxy); | 253 DISALLOW_COPY_AND_ASSIGN(InputHandlerProxy); |
233 }; | 254 }; |
234 | 255 |
235 } // namespace ui | 256 } // namespace ui |
236 | 257 |
237 #endif // UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ | 258 #endif // UI_EVENTS_BLINK_INPUT_HANDLER_PROXY_H_ |
OLD | NEW |