Home | History | Annotate | Download | only in input
      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