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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_RENDERER_INPUT_INPUT_HANDLER_MANAGER_H_ 6 #define CONTENT_RENDERER_INPUT_INPUT_HANDLER_MANAGER_H_ 7 8 #include "base/containers/scoped_ptr_hash_map.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/weak_ptr.h" 11 #include "content/port/common/input_event_ack_state.h" 12 #include "content/renderer/render_view_impl.h" 13 14 namespace base { 15 class MessageLoopProxy; 16 } 17 18 namespace cc { 19 class InputHandler; 20 struct DidOverscrollParams; 21 } 22 23 namespace blink { 24 class WebInputEvent; 25 } 26 27 namespace content { 28 29 class InputHandlerWrapper; 30 class InputHandlerManagerClient; 31 32 // InputHandlerManager class manages InputHandlerProxy instances for 33 // the WebViews in this renderer. 34 class InputHandlerManager { 35 public: 36 // |message_loop_proxy| is the MessageLoopProxy of the compositor thread. Both 37 // the underlying MessageLoop and supplied |client| must outlive this object. 38 InputHandlerManager( 39 const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy, 40 InputHandlerManagerClient* client); 41 ~InputHandlerManager(); 42 43 // Callable from the main thread only. 44 void AddInputHandler( 45 int routing_id, 46 const base::WeakPtr<cc::InputHandler>& input_handler, 47 const base::WeakPtr<RenderViewImpl>& render_view_impl); 48 49 // Callback only from the compositor's thread. 50 void RemoveInputHandler(int routing_id); 51 52 // Called from the compositor's thread. 53 InputEventAckState HandleInputEvent(int routing_id, 54 const blink::WebInputEvent* input_event, 55 ui::LatencyInfo* latency_info); 56 57 // Called from the compositor's thread. 58 void DidOverscroll(int routing_id, const cc::DidOverscrollParams& params); 59 60 private: 61 // Called from the compositor's thread. 62 void AddInputHandlerOnCompositorThread( 63 int routing_id, 64 const scoped_refptr<base::MessageLoopProxy>& main_loop, 65 const base::WeakPtr<cc::InputHandler>& input_handler, 66 const base::WeakPtr<RenderViewImpl>& render_view_impl); 67 68 typedef base::ScopedPtrHashMap<int, // routing_id 69 InputHandlerWrapper> InputHandlerMap; 70 InputHandlerMap input_handlers_; 71 72 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 73 InputHandlerManagerClient* client_; 74 }; 75 76 } // namespace content 77 78 #endif // CONTENT_RENDERER_INPUT_INPUT_HANDLER_MANAGER_H_ 79