Index: content/browser/devtools/protocol/input_handler.h |
diff --git a/content/browser/devtools/protocol/input_handler.h b/content/browser/devtools/protocol/input_handler.h |
index 691cad2f6417e1310317a2edcedbd44063dd263a..e98c527e03135cb50ba7ba059d5969d59cc43855 100644 |
--- a/content/browser/devtools/protocol/input_handler.h |
+++ b/content/browser/devtools/protocol/input_handler.h |
@@ -10,6 +10,7 @@ |
#include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h" |
#include "content/browser/renderer_host/input/synthetic_gesture.h" |
#include "content/common/input/synthetic_smooth_scroll_gesture_params.h" |
+#include "content/public/browser/render_widget_host.h" |
#include "ui/gfx/geometry/size_f.h" |
namespace cc { |
@@ -23,18 +24,20 @@ class RenderWidgetHostImpl; |
namespace devtools { |
namespace input { |
-class InputHandler { |
+class InputHandler : public RenderWidgetHost::InputEventObserver { |
public: |
typedef DevToolsProtocolClient::Response Response; |
InputHandler(); |
- virtual ~InputHandler(); |
+ ~InputHandler() override; |
void SetRenderWidgetHost(RenderWidgetHostImpl* host); |
void SetClient(std::unique_ptr<Client> client); |
void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata); |
+ void Detached(); |
- Response DispatchKeyEvent(const std::string& type, |
+ Response DispatchKeyEvent(DevToolsCommandId command_id, |
+ const std::string& type, |
const int* modifiers, |
const double* timestamp, |
const std::string* text, |
@@ -48,7 +51,8 @@ class InputHandler { |
const bool* is_keypad, |
const bool* is_system_key); |
- Response DispatchMouseEvent(const std::string& type, |
+ Response DispatchMouseEvent(DevToolsCommandId command_id, |
+ const std::string& type, |
int x, |
int y, |
const int* modifiers, |
@@ -101,6 +105,13 @@ class InputHandler { |
const double* timestamp); |
private: |
+ // InputEventObserver |
+ void OnInputEvent(const blink::WebInputEvent& event) override; |
+ void OnInputEventAck(const blink::WebInputEvent& event) override; |
+ |
+ void SendDispatchKeyEventResponse(DevToolsCommandId command_id); |
+ void SendDispatchMouseEventResponse(DevToolsCommandId command_id); |
+ |
void SendSynthesizePinchGestureResponse(DevToolsCommandId command_id, |
SyntheticGesture::Result result); |
@@ -125,8 +136,16 @@ class InputHandler { |
DevToolsCommandId command_id, |
SyntheticGesture::Result result); |
+ void ClearPendingKeyCommands(); |
+ void ClearPendingMouseCommands(); |
+ |
RenderWidgetHostImpl* host_; |
std::unique_ptr<Client> client_; |
+ // DevToolsCommandIds for calls to Input.dispatchKey/MouseEvent that have been |
+ // sent to the renderer, but that we haven't yet received an ack for. |
+ bool input_queued_; |
+ std::deque<DevToolsCommandId> pending_key_command_ids_; |
+ std::deque<DevToolsCommandId> pending_mouse_command_ids_; |
float page_scale_factor_; |
gfx::SizeF scrollable_viewport_size_; |
base::WeakPtrFactory<InputHandler> weak_factory_; |