| 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 CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ | 5 #ifndef CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ |
| 6 #define CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ | 6 #define CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ |
| 7 | 7 |
| 8 #include <queue> | 8 #include <queue> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <unordered_map> | 10 #include <unordered_map> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 // based on routing_id (see AddRoute and RemoveRoute). | 35 // based on routing_id (see AddRoute and RemoveRoute). |
| 36 // | 36 // |
| 37 // The user of this class provides an instance of InputHandlerManager via | 37 // The user of this class provides an instance of InputHandlerManager via |
| 38 // |SetInputHandlerManager|. The InputHandlerManager's |HandleInputEvent| | 38 // |SetInputHandlerManager|. The InputHandlerManager's |HandleInputEvent| |
| 39 // will be called on the target thread to process the WebInputEvents. | 39 // will be called on the target thread to process the WebInputEvents. |
| 40 // | 40 // |
| 41 | 41 |
| 42 namespace content { | 42 namespace content { |
| 43 | 43 |
| 44 class CONTENT_EXPORT InputEventFilter : public InputHandlerManagerClient, | 44 class CONTENT_EXPORT InputEventFilter : public InputHandlerManagerClient, |
| 45 public IPC::MessageFilter, | 45 public IPC::MessageFilter { |
| 46 public MainThreadEventQueueClient { | |
| 47 public: | 46 public: |
| 48 InputEventFilter( | 47 InputEventFilter( |
| 49 const base::Callback<void(const IPC::Message&)>& main_listener, | 48 const base::Callback<void(const IPC::Message&)>& main_listener, |
| 50 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 49 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 51 const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner); | 50 const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner); |
| 52 | 51 |
| 53 // The |handler| is invoked on the thread associated with |target_loop| to | 52 // The |handler| is invoked on the thread associated with |target_loop| to |
| 54 // handle input events matching the filtered routes. | 53 // handle input events matching the filtered routes. |
| 55 // | 54 // |
| 56 // If INPUT_EVENT_ACK_STATE_NOT_CONSUMED is returned by the handler, | 55 // If INPUT_EVENT_ACK_STATE_NOT_CONSUMED is returned by the handler, |
| 57 // the original InputMsg_HandleInputEvent message will be delivered to | 56 // the original InputMsg_HandleInputEvent message will be delivered to |
| 58 // |main_listener| on the main thread. (The "main thread" in this context is | 57 // |main_listener| on the main thread. (The "main thread" in this context is |
| 59 // the thread where the InputEventFilter was constructed.) The responsibility | 58 // the thread where the InputEventFilter was constructed.) The responsibility |
| 60 // is left to the eventual handler to deliver the corresponding | 59 // is left to the eventual handler to deliver the corresponding |
| 61 // InputHostMsg_HandleInputEvent_ACK. | 60 // InputHostMsg_HandleInputEvent_ACK. |
| 62 // | 61 // |
| 63 void SetInputHandlerManager(InputHandlerManager*) override; | 62 void SetInputHandlerManager(InputHandlerManager*) override; |
| 64 void RegisterRoutingID(int routing_id) override; | 63 void RegisterRoutingID( |
| 64 int routing_id, |
| 65 const scoped_refptr<MainThreadEventQueue>& input_event_queue) override; |
| 65 void UnregisterRoutingID(int routing_id) override; | 66 void UnregisterRoutingID(int routing_id) override; |
| 66 void RegisterAssociatedRenderFrameRoutingID( | 67 void RegisterAssociatedRenderFrameRoutingID( |
| 67 int render_frame_routing_id, | 68 int render_frame_routing_id, |
| 68 int render_view_routing_id) override; | 69 int render_view_routing_id) override; |
| 69 void QueueClosureForMainThreadEventQueue( | 70 void QueueClosureForMainThreadEventQueue( |
| 70 int routing_id, | 71 int routing_id, |
| 71 const base::Closure& closure) override; | 72 const base::Closure& closure) override; |
| 72 void DidOverscroll(int routing_id, | 73 void DidOverscroll(int routing_id, |
| 73 const ui::DidOverscrollParams& params) override; | 74 const ui::DidOverscrollParams& params) override; |
| 74 void DidStopFlinging(int routing_id) override; | 75 void DidStopFlinging(int routing_id) override; |
| 75 void DispatchNonBlockingEventToMainThread( | 76 void DispatchNonBlockingEventToMainThread( |
| 76 int routing_id, | 77 int routing_id, |
| 77 ui::WebScopedInputEvent event, | 78 ui::WebScopedInputEvent event, |
| 78 const ui::LatencyInfo& latency_info) override; | 79 const ui::LatencyInfo& latency_info) override; |
| 79 | 80 |
| 80 void NotifyInputEventHandled(int routing_id, | |
| 81 blink::WebInputEvent::Type type, | |
| 82 blink::WebInputEventResult result, | |
| 83 InputEventAckState ack_result) override; | |
| 84 void ProcessRafAlignedInput(int routing_id, | |
| 85 base::TimeTicks frame_time) override; | |
| 86 | |
| 87 // IPC::MessageFilter methods: | 81 // IPC::MessageFilter methods: |
| 88 void OnFilterAdded(IPC::Channel* channel) override; | 82 void OnFilterAdded(IPC::Channel* channel) override; |
| 89 void OnFilterRemoved() override; | 83 void OnFilterRemoved() override; |
| 90 void OnChannelClosing() override; | 84 void OnChannelClosing() override; |
| 91 bool OnMessageReceived(const IPC::Message& message) override; | 85 bool OnMessageReceived(const IPC::Message& message) override; |
| 92 | 86 |
| 93 // MainThreadEventQueueClient methods: | |
| 94 void HandleEventOnMainThread(int routing_id, | |
| 95 const blink::WebCoalescedInputEvent* event, | |
| 96 const ui::LatencyInfo& latency, | |
| 97 InputEventDispatchType dispatch_type) override; | |
| 98 // Send an InputEventAck IPC message. |touch_event_id| represents | |
| 99 // the unique event id for the original WebTouchEvent and should | |
| 100 // be 0 if otherwise. See WebInputEventTraits::GetUniqueTouchEventId. | |
| 101 void SendInputEventAck(int routing_id, | |
| 102 blink::WebInputEvent::Type type, | |
| 103 InputEventAckState ack_result, | |
| 104 uint32_t touch_event_id) override; | |
| 105 | |
| 106 void NeedsMainFrame(int routing_id) override; | |
| 107 | |
| 108 private: | 87 private: |
| 109 ~InputEventFilter() override; | 88 ~InputEventFilter() override; |
| 110 | 89 |
| 111 void ForwardToHandler(int routing_id, | 90 void ForwardToHandler(int routing_id, |
| 112 const IPC::Message& message, | 91 const IPC::Message& message, |
| 113 base::TimeTicks received_time); | 92 base::TimeTicks received_time); |
| 114 void DidForwardToHandlerAndOverscroll( | 93 void DidForwardToHandlerAndOverscroll( |
| 115 int routing_id, | 94 int routing_id, |
| 116 InputEventDispatchType dispatch_type, | 95 InputEventDispatchType dispatch_type, |
| 117 InputEventAckState ack_state, | 96 InputEventAckState ack_state, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 142 | 121 |
| 143 using RouteQueueMap = | 122 using RouteQueueMap = |
| 144 std::unordered_map<int, scoped_refptr<MainThreadEventQueue>>; | 123 std::unordered_map<int, scoped_refptr<MainThreadEventQueue>>; |
| 145 // Maps RenderView routing ids to a MainThreadEventQueue. | 124 // Maps RenderView routing ids to a MainThreadEventQueue. |
| 146 RouteQueueMap route_queues_; | 125 RouteQueueMap route_queues_; |
| 147 | 126 |
| 148 using AssociatedRoutes = std::unordered_map<int, int>; | 127 using AssociatedRoutes = std::unordered_map<int, int>; |
| 149 // Maps RenderFrame routing ids to RenderView routing ids so that | 128 // Maps RenderFrame routing ids to RenderView routing ids so that |
| 150 // events sent down the two routing pipes can be handled synchronously. | 129 // events sent down the two routing pipes can be handled synchronously. |
| 151 AssociatedRoutes associated_routes_; | 130 AssociatedRoutes associated_routes_; |
| 152 | |
| 153 blink::scheduler::RendererScheduler* renderer_scheduler_; | |
| 154 }; | 131 }; |
| 155 | 132 |
| 156 } // namespace content | 133 } // namespace content |
| 157 | 134 |
| 158 #endif // CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ | 135 #endif // CONTENT_RENDERER_INPUT_INPUT_EVENT_FILTER_H_ |
| OLD | NEW |