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/common/input/input_event_ack_state.h" 12#include "content/renderer/render_view_impl.h" 13 14namespace base { 15class MessageLoopProxy; 16} 17 18namespace cc { 19class InputHandler; 20} 21 22namespace blink { 23class WebInputEvent; 24} 25 26namespace content { 27 28class InputHandlerWrapper; 29class InputHandlerManagerClient; 30struct DidOverscrollParams; 31 32// InputHandlerManager class manages InputHandlerProxy instances for 33// the WebViews in this renderer. 34class 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 DidOverscrollParams& params); 59 60 // Called from the compositor's thread. 61 void DidStopFlinging(int routing_id); 62 63 private: 64 // Called from the compositor's thread. 65 void AddInputHandlerOnCompositorThread( 66 int routing_id, 67 const scoped_refptr<base::MessageLoopProxy>& main_loop, 68 const base::WeakPtr<cc::InputHandler>& input_handler, 69 const base::WeakPtr<RenderViewImpl>& render_view_impl); 70 71 typedef base::ScopedPtrHashMap<int, // routing_id 72 InputHandlerWrapper> InputHandlerMap; 73 InputHandlerMap input_handlers_; 74 75 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; 76 InputHandlerManagerClient* client_; 77}; 78 79} // namespace content 80 81#endif // CONTENT_RENDERER_INPUT_INPUT_HANDLER_MANAGER_H_ 82