• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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