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_BROWSER_RENDERER_HOST_INPUT_INPUT_ROUTER_H_
      6 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_ROUTER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "content/port/browser/event_with_latency_info.h"
     10 #include "content/port/common/input_event_ack_state.h"
     11 #include "content/public/browser/native_web_keyboard_event.h"
     12 #include "ipc/ipc_listener.h"
     13 #include "third_party/WebKit/public/web/WebInputEvent.h"
     14 
     15 namespace content {
     16 
     17 class InputRouterClient;
     18 
     19 // The InputRouter allows the embedder to customize how input events are
     20 // sent to the renderer, and how responses are dispatched to the browser.
     21 // While the router should respect the relative order in which events are
     22 // received, it is free to customize when those events are dispatched.
     23 class InputRouter : public IPC::Listener {
     24  public:
     25   virtual ~InputRouter() {}
     26 
     27   // Send and take ownership of the the given InputMsg_*. This should be used
     28   // only for event types not associated with a WebInputEvent.  Returns true on
     29   // success and false otherwise.
     30   virtual bool SendInput(IPC::Message* message) = 0;
     31 
     32   // WebInputEvents
     33   virtual void SendMouseEvent(
     34       const MouseEventWithLatencyInfo& mouse_event) = 0;
     35   virtual void SendWheelEvent(
     36       const MouseWheelEventWithLatencyInfo& wheel_event) = 0;
     37   virtual void SendKeyboardEvent(
     38       const NativeWebKeyboardEvent& key_event,
     39       const ui::LatencyInfo& latency_info) = 0;
     40   virtual void SendGestureEvent(
     41       const GestureEventWithLatencyInfo& gesture_event) = 0;
     42   virtual void SendTouchEvent(
     43       const TouchEventWithLatencyInfo& touch_event) = 0;
     44   virtual void SendMouseEventImmediately(
     45       const MouseEventWithLatencyInfo& mouse_event) = 0;
     46   virtual void SendTouchEventImmediately(
     47       const TouchEventWithLatencyInfo& touch_event) = 0;
     48   virtual void SendGestureEventImmediately(
     49       const GestureEventWithLatencyInfo& gesture_event) = 0;
     50 
     51   // Returns the oldest queued or in-flight keyboard event sent to the router.
     52   virtual const NativeWebKeyboardEvent* GetLastKeyboardEvent() const = 0;
     53 
     54   // Returns |true| if the caller should immediately forward touch events to the
     55   // router.  When |false|, the caller can forego sending touch events, and
     56   // instead consume them directly.
     57   virtual bool ShouldForwardTouchEvent() const = 0;
     58 
     59   // Returns |true| if the caller should immediately forward the provided
     60   // |gesture_event| to the router.
     61   virtual bool ShouldForwardGestureEvent(
     62       const GestureEventWithLatencyInfo& gesture_event) const = 0;
     63 
     64   // Returns |true| if the router has any queued or in-flight gesture events.
     65   virtual bool HasQueuedGestureEvents() const = 0;
     66 };
     67 
     68 }  // namespace content
     69 
     70 #endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_ROUTER_H_
     71