Index: content/browser/devtools/protocol/input_handler.cc |
diff --git a/content/browser/devtools/protocol/input_handler.cc b/content/browser/devtools/protocol/input_handler.cc |
index b963044209c287436628372f8df442313c35867a..bf0866c1c417ce5af849c3fc0426ff61111b8e24 100644 |
--- a/content/browser/devtools/protocol/input_handler.cc |
+++ b/content/browser/devtools/protocol/input_handler.cc |
@@ -11,6 +11,7 @@ |
#include "base/threading/thread_task_runner_handle.h" |
#include "base/trace_event/trace_event.h" |
#include "cc/output/compositor_frame_metadata.h" |
+#include "content/browser/frame_host/render_frame_host_impl.h" |
#include "content/browser/renderer_host/render_widget_host_impl.h" |
#include "content/common/input/synthetic_pinch_gesture_params.h" |
#include "content/common/input/synthetic_smooth_scroll_gesture_params.h" |
@@ -20,8 +21,7 @@ |
#include "ui/gfx/geometry/point.h" |
namespace content { |
-namespace devtools { |
-namespace input { |
+namespace protocol { |
namespace { |
@@ -33,15 +33,18 @@ gfx::Vector2dF CssPixelsToVector2dF(int x, int y, float page_scale_factor) { |
return gfx::Vector2dF(x * page_scale_factor, y * page_scale_factor); |
} |
-bool StringToGestureSourceType(const std::string& in, |
+bool StringToGestureSourceType(Maybe<std::string> in, |
SyntheticGestureParams::GestureSourceType& out) { |
- if (in == kGestureSourceTypeDefault) { |
+ if (!in.isJust()) { |
out = SyntheticGestureParams::GestureSourceType::DEFAULT_INPUT; |
return true; |
- } else if (in == kGestureSourceTypeTouch) { |
+ } else if (in.fromJust() == Input::GestureSourceTypeEnum::Default) { |
caseq
2016/12/14 18:18:18
no else after return
dgozman
2016/12/15 04:20:08
Done.
|
+ out = SyntheticGestureParams::GestureSourceType::DEFAULT_INPUT; |
+ return true; |
+ } else if (in.fromJust() == Input::GestureSourceTypeEnum::Touch) { |
caseq
2016/12/14 18:18:18
ditto.
|
out = SyntheticGestureParams::GestureSourceType::TOUCH_INPUT; |
return true; |
- } else if (in == kGestureSourceTypeMouse) { |
+ } else if (in.fromJust() == Input::GestureSourceTypeEnum::Mouse) { |
caseq
2016/12/14 18:18:18
ditto.
|
out = SyntheticGestureParams::GestureSourceType::MOUSE_INPUT; |
return true; |
} else { |
caseq
2016/12/14 18:18:18
ditto.
|
@@ -49,40 +52,32 @@ bool StringToGestureSourceType(const std::string& in, |
} |
} |
-} |
- |
-typedef DevToolsProtocolClient::Response Response; |
- |
-namespace { |
- |
-void SetEventModifiers(blink::WebInputEvent* event, const int* modifiers) { |
- if (!modifiers) |
- return; |
- if (*modifiers & 1) |
+void SetEventModifiers(blink::WebInputEvent* event, int modifiers) { |
+ if (modifiers & 1) |
event->modifiers |= blink::WebInputEvent::AltKey; |
- if (*modifiers & 2) |
+ if (modifiers & 2) |
event->modifiers |= blink::WebInputEvent::ControlKey; |
- if (*modifiers & 4) |
+ if (modifiers & 4) |
event->modifiers |= blink::WebInputEvent::MetaKey; |
- if (*modifiers & 8) |
+ if (modifiers & 8) |
event->modifiers |= blink::WebInputEvent::ShiftKey; |
} |
-void SetEventTimestamp(blink::WebInputEvent* event, const double* timestamp) { |
+void SetEventTimestamp(blink::WebInputEvent* event, Maybe<double> timestamp) { |
// Convert timestamp, in seconds since unix epoch, to an event timestamp |
// which is time ticks since platform start time. |
- base::TimeTicks ticks = timestamp |
- ? base::TimeDelta::FromSecondsD(*timestamp) + |
- base::TimeTicks::UnixEpoch() |
- : base::TimeTicks::Now(); |
+ base::TimeTicks ticks = timestamp.isJust() |
+ ? base::TimeDelta::FromSecondsD(timestamp.fromJust()) + |
+ base::TimeTicks::UnixEpoch() |
+ : base::TimeTicks::Now(); |
event->timeStampSeconds = (ticks - base::TimeTicks()).InSecondsF(); |
} |
-bool SetKeyboardEventText(blink::WebUChar* to, const std::string* from) { |
- if (!from) |
+bool SetKeyboardEventText(blink::WebUChar* to, Maybe<std::string> from) { |
+ if (!from.isJust()) |
return true; |
- base::string16 text16 = base::UTF8ToUTF16(*from); |
+ base::string16 text16 = base::UTF8ToUTF16(from.fromJust()); |
if (text16.size() > blink::WebKeyboardEvent::textLengthCap) |
return false; |
@@ -92,19 +87,19 @@ bool SetKeyboardEventText(blink::WebUChar* to, const std::string* from) { |
} |
bool SetMouseEventButton(blink::WebMouseEvent* event, |
- const std::string* button) { |
- if (!button) |
+ const std::string& button) { |
+ if (button.empty()) |
return true; |
- if (*button == dispatch_mouse_event::kButtonNone) { |
+ if (button == Input::DispatchMouseEvent::ButtonEnum::None) { |
event->button = blink::WebMouseEvent::Button::NoButton; |
- } else if (*button == dispatch_mouse_event::kButtonLeft) { |
+ } else if (button == Input::DispatchMouseEvent::ButtonEnum::Left) { |
event->button = blink::WebMouseEvent::Button::Left; |
event->modifiers |= blink::WebInputEvent::LeftButtonDown; |
- } else if (*button == dispatch_mouse_event::kButtonMiddle) { |
+ } else if (button == Input::DispatchMouseEvent::ButtonEnum::Middle) { |
event->button = blink::WebMouseEvent::Button::Middle; |
event->modifiers |= blink::WebInputEvent::MiddleButtonDown; |
- } else if (*button == dispatch_mouse_event::kButtonRight) { |
+ } else if (button == Input::DispatchMouseEvent::ButtonEnum::Right) { |
event->button = blink::WebMouseEvent::Button::Right; |
event->modifiers |= blink::WebInputEvent::RightButtonDown; |
} else { |
@@ -114,11 +109,11 @@ bool SetMouseEventButton(blink::WebMouseEvent* event, |
} |
bool SetMouseEventType(blink::WebMouseEvent* event, const std::string& type) { |
- if (type == dispatch_mouse_event::kTypeMousePressed) { |
+ if (type == Input::DispatchMouseEvent::TypeEnum::MousePressed) { |
event->type = blink::WebInputEvent::MouseDown; |
- } else if (type == dispatch_mouse_event::kTypeMouseReleased) { |
+ } else if (type == Input::DispatchMouseEvent::TypeEnum::MouseReleased) { |
event->type = blink::WebInputEvent::MouseUp; |
- } else if (type == dispatch_mouse_event::kTypeMouseMoved) { |
+ } else if (type == Input::DispatchMouseEvent::TypeEnum::MouseMoved) { |
event->type = blink::WebInputEvent::MouseMove; |
} else { |
return false; |
@@ -126,23 +121,59 @@ bool SetMouseEventType(blink::WebMouseEvent* event, const std::string& type) { |
return true; |
} |
+void SendSynthesizePinchGestureResponse( |
+ std::unique_ptr<Input::Backend::SynthesizePinchGestureCallback> callback, |
+ SyntheticGesture::Result result) { |
+ if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
+ callback->sendSuccess(); |
+ } else { |
+ callback->sendFailure(Response::Error( |
+ base::StringPrintf("Synthetic pinch failed, result was %d", result))); |
+ } |
+} |
+ |
+void SendSynthesizeTapGestureResponse( |
+ std::unique_ptr<Input::Backend::SynthesizeTapGestureCallback> callback, |
+ bool send_success, |
+ SyntheticGesture::Result result) { |
+ if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
+ if (send_success) |
caseq
2016/12/14 18:18:18
So success we try to send only once...
|
+ callback->sendSuccess(); |
+ } else { |
+ callback->sendFailure(Response::Error( |
caseq
2016/12/14 18:18:18
... and failure may be sent more than once?
|
+ base::StringPrintf("Synthetic tap failed, result was %d", result))); |
+ } |
+} |
+ |
+void SendSynthesizeScrollGestureResponse( |
+ std::unique_ptr<Input::Backend::SynthesizeScrollGestureCallback> callback, |
+ SyntheticGesture::Result result) { |
+ if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
+ callback->sendSuccess(); |
+ } else { |
+ callback->sendFailure(Response::Error( |
+ base::StringPrintf("Synthetic scroll failed, result was %d", result))); |
+ } |
+} |
+ |
} // namespace |
InputHandler::InputHandler() |
: host_(NULL), |
page_scale_factor_(1.0), |
+ last_id_(0), |
weak_factory_(this) { |
} |
InputHandler::~InputHandler() { |
} |
-void InputHandler::SetRenderWidgetHost(RenderWidgetHostImpl* host) { |
+void InputHandler::SetRenderFrameHost(RenderFrameHostImpl* host) { |
host_ = host; |
} |
-void InputHandler::SetClient(std::unique_ptr<Client> client) { |
- client_.swap(client); |
+void InputHandler::Wire(UberDispatcher* dispatcher) { |
+ Input::Dispatcher::wire(dispatcher, this); |
} |
void InputHandler::OnSwapCompositorFrame( |
@@ -151,69 +182,73 @@ void InputHandler::OnSwapCompositorFrame( |
scrollable_viewport_size_ = frame_metadata.scrollable_viewport_size; |
} |
+Response InputHandler::Disable() { |
+ return Response::OK(); |
+} |
+ |
Response InputHandler::DispatchKeyEvent( |
const std::string& type, |
- const int* modifiers, |
- const double* timestamp, |
- const std::string* text, |
- const std::string* unmodified_text, |
- const std::string* key_identifier, |
- const std::string* code, |
- const std::string* key, |
- const int* windows_virtual_key_code, |
- const int* native_virtual_key_code, |
- const bool* auto_repeat, |
- const bool* is_keypad, |
- const bool* is_system_key) { |
+ Maybe<int> modifiers, |
+ Maybe<double> timestamp, |
+ Maybe<std::string> text, |
+ Maybe<std::string> unmodified_text, |
+ Maybe<std::string> key_identifier, |
+ Maybe<std::string> code, |
+ Maybe<std::string> key, |
+ Maybe<int> windows_virtual_key_code, |
+ Maybe<int> native_virtual_key_code, |
+ Maybe<bool> auto_repeat, |
+ Maybe<bool> is_keypad, |
+ Maybe<bool> is_system_key) { |
NativeWebKeyboardEvent event; |
event.skip_in_browser = true; |
- if (type == dispatch_key_event::kTypeKeyDown) { |
+ if (type == Input::DispatchKeyEvent::TypeEnum::KeyDown) { |
event.type = blink::WebInputEvent::KeyDown; |
- } else if (type == dispatch_key_event::kTypeKeyUp) { |
+ } else if (type == Input::DispatchKeyEvent::TypeEnum::KeyUp) { |
event.type = blink::WebInputEvent::KeyUp; |
- } else if (type == dispatch_key_event::kTypeChar) { |
+ } else if (type == Input::DispatchKeyEvent::TypeEnum::Char) { |
event.type = blink::WebInputEvent::Char; |
- } else if (type == dispatch_key_event::kTypeRawKeyDown) { |
+ } else if (type == Input::DispatchKeyEvent::TypeEnum::RawKeyDown) { |
event.type = blink::WebInputEvent::RawKeyDown; |
} else { |
return Response::InvalidParams( |
base::StringPrintf("Unexpected event type '%s'", type.c_str())); |
} |
- SetEventModifiers(&event, modifiers); |
- SetEventTimestamp(&event, timestamp); |
- if (!SetKeyboardEventText(event.text, text)) |
+ SetEventModifiers(&event, modifiers.fromMaybe(0)); |
+ SetEventTimestamp(&event, std::move(timestamp)); |
+ if (!SetKeyboardEventText(event.text, std::move(text))) |
return Response::InvalidParams("Invalid 'text' parameter"); |
- if (!SetKeyboardEventText(event.unmodifiedText, unmodified_text)) |
+ if (!SetKeyboardEventText(event.unmodifiedText, std::move(unmodified_text))) |
return Response::InvalidParams("Invalid 'unmodifiedText' parameter"); |
- if (windows_virtual_key_code) |
- event.windowsKeyCode = *windows_virtual_key_code; |
- if (native_virtual_key_code) |
- event.nativeKeyCode = *native_virtual_key_code; |
- if (auto_repeat && *auto_repeat) |
+ if (windows_virtual_key_code.isJust()) |
+ event.windowsKeyCode = windows_virtual_key_code.fromJust(); |
+ if (native_virtual_key_code.isJust()) |
+ event.nativeKeyCode = native_virtual_key_code.fromJust(); |
+ if (auto_repeat.fromMaybe(false)) |
event.modifiers |= blink::WebInputEvent::IsAutoRepeat; |
- if (is_keypad && *is_keypad) |
+ if (is_keypad.fromMaybe(false)) |
event.modifiers |= blink::WebInputEvent::IsKeyPad; |
- if (is_system_key) |
- event.isSystemKey = *is_system_key; |
+ if (is_system_key.isJust()) |
+ event.isSystemKey = is_system_key.fromJust(); |
- if (code) { |
+ if (code.isJust()) { |
event.domCode = static_cast<int>( |
- ui::KeycodeConverter::CodeStringToDomCode(*code)); |
+ ui::KeycodeConverter::CodeStringToDomCode(code.fromJust())); |
} |
- if (key) { |
+ if (key.isJust()) { |
event.domKey = static_cast<int>( |
- ui::KeycodeConverter::KeyStringToDomKey(*key)); |
+ ui::KeycodeConverter::KeyStringToDomKey(key.fromJust())); |
} |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ if (!host_ || !host_->GetRenderWidgetHost()) |
+ return Response::InternalError(); |
- host_->Focus(); |
- host_->ForwardKeyboardEvent(event); |
+ host_->GetRenderWidgetHost()->Focus(); |
+ host_->GetRenderWidgetHost()->ForwardKeyboardEvent(event); |
return Response::OK(); |
} |
@@ -221,19 +256,19 @@ Response InputHandler::DispatchMouseEvent( |
const std::string& type, |
int x, |
int y, |
- const int* modifiers, |
- const double* timestamp, |
- const std::string* button, |
- const int* click_count) { |
+ Maybe<int> modifiers, |
+ Maybe<double> timestamp, |
+ Maybe<std::string> button, |
+ Maybe<int> click_count) { |
blink::WebMouseEvent event; |
if (!SetMouseEventType(&event, type)) { |
return Response::InvalidParams( |
base::StringPrintf("Unexpected event type '%s'", type.c_str())); |
} |
- SetEventModifiers(&event, modifiers); |
- SetEventTimestamp(&event, timestamp); |
- if (!SetMouseEventButton(&event, button)) |
+ SetEventModifiers(&event, modifiers.fromMaybe(0)); |
+ SetEventTimestamp(&event, std::move(timestamp)); |
+ if (!SetMouseEventButton(&event, button.fromMaybe(""))) |
return Response::InvalidParams("Invalid mouse button"); |
event.x = x * page_scale_factor_; |
@@ -242,14 +277,14 @@ Response InputHandler::DispatchMouseEvent( |
event.windowY = y * page_scale_factor_; |
event.globalX = x * page_scale_factor_; |
event.globalY = y * page_scale_factor_; |
- event.clickCount = click_count ? *click_count : 0; |
+ event.clickCount = click_count.fromMaybe(0); |
event.pointerType = blink::WebPointerProperties::PointerType::Mouse; |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ if (!host_ || !host_->GetRenderWidgetHost()) |
+ return Response::InternalError(); |
- host_->Focus(); |
- host_->ForwardMouseEvent(event); |
+ host_->GetRenderWidgetHost()->Focus(); |
+ host_->GetRenderWidgetHost()->ForwardMouseEvent(event); |
return Response::OK(); |
} |
@@ -258,21 +293,21 @@ Response InputHandler::EmulateTouchFromMouseEvent(const std::string& type, |
int y, |
double timestamp, |
const std::string& button, |
- double* delta_x, |
- double* delta_y, |
- int* modifiers, |
- int* click_count) { |
+ Maybe<double> delta_x, |
+ Maybe<double> delta_y, |
+ Maybe<int> modifiers, |
+ Maybe<int> click_count) { |
blink::WebMouseWheelEvent wheel_event; |
blink::WebMouseEvent mouse_event; |
blink::WebMouseEvent* event = &mouse_event; |
- if (type == emulate_touch_from_mouse_event::kTypeMouseWheel) { |
- if (!delta_x || !delta_y) { |
+ if (type == Input::EmulateTouchFromMouseEvent::TypeEnum::MouseWheel) { |
+ if (!delta_x.isJust() || !delta_y.isJust()) { |
return Response::InvalidParams( |
"'deltaX' and 'deltaY' are expected for mouseWheel event"); |
} |
- wheel_event.deltaX = static_cast<float>(*delta_x); |
- wheel_event.deltaY = static_cast<float>(*delta_y); |
+ wheel_event.deltaX = static_cast<float>(delta_x.fromJust()); |
+ wheel_event.deltaY = static_cast<float>(delta_y.fromJust()); |
event = &wheel_event; |
event->type = blink::WebInputEvent::MouseWheel; |
} else if (!SetMouseEventType(event, type)) { |
@@ -280,9 +315,9 @@ Response InputHandler::EmulateTouchFromMouseEvent(const std::string& type, |
base::StringPrintf("Unexpected event type '%s'", type.c_str())); |
} |
- SetEventModifiers(event, modifiers); |
- SetEventTimestamp(event, ×tamp); |
- if (!SetMouseEventButton(event, &button)) |
+ SetEventModifiers(event, modifiers.fromMaybe(0)); |
+ SetEventTimestamp(event, Maybe<double>(timestamp)); |
+ if (!SetMouseEventButton(event, button)) |
return Response::InvalidParams("Invalid mouse button"); |
event->x = x; |
@@ -291,28 +326,30 @@ Response InputHandler::EmulateTouchFromMouseEvent(const std::string& type, |
event->windowY = y; |
event->globalX = x; |
event->globalY = y; |
- event->clickCount = click_count ? *click_count : 0; |
+ event->clickCount = click_count.fromMaybe(0); |
event->pointerType = blink::WebPointerProperties::PointerType::Touch; |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ if (!host_ || !host_->GetRenderWidgetHost()) |
+ return Response::InternalError(); |
if (event->type == blink::WebInputEvent::MouseWheel) |
- host_->ForwardWheelEvent(wheel_event); |
+ host_->GetRenderWidgetHost()->ForwardWheelEvent(wheel_event); |
else |
- host_->ForwardMouseEvent(mouse_event); |
+ host_->GetRenderWidgetHost()->ForwardMouseEvent(mouse_event); |
return Response::OK(); |
} |
-Response InputHandler::SynthesizePinchGesture( |
- DevToolsCommandId command_id, |
+void InputHandler::SynthesizePinchGesture( |
int x, |
int y, |
double scale_factor, |
- const int* relative_speed, |
- const std::string* gesture_source_type) { |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ Maybe<int> relative_speed, |
+ Maybe<std::string> gesture_source_type, |
+ std::unique_ptr<SynthesizePinchGestureCallback> callback) { |
+ if (!host_ || !host_->GetRenderWidgetHost()) { |
+ callback->sendFailure(Response::InternalError()); |
+ return; |
+ } |
SyntheticPinchGestureParams gesture_params; |
const int kDefaultRelativeSpeed = 800; |
@@ -320,38 +357,40 @@ Response InputHandler::SynthesizePinchGesture( |
gesture_params.scale_factor = scale_factor; |
gesture_params.anchor = CssPixelsToPointF(x, y, page_scale_factor_); |
gesture_params.relative_pointer_speed_in_pixels_s = |
- relative_speed ? *relative_speed : kDefaultRelativeSpeed; |
+ relative_speed.fromMaybe(kDefaultRelativeSpeed); |
if (!StringToGestureSourceType( |
- gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, |
- gesture_params.gesture_source_type)) { |
- return Response::InvalidParams("gestureSourceType"); |
+ std::move(gesture_source_type), |
+ gesture_params.gesture_source_type)) { |
+ callback->sendFailure( |
+ Response::InvalidParams("Unknown gestureSourceType")); |
+ return; |
} |
- host_->QueueSyntheticGesture( |
+ host_->GetRenderWidgetHost()->QueueSyntheticGesture( |
SyntheticGesture::Create(gesture_params), |
- base::Bind(&InputHandler::SendSynthesizePinchGestureResponse, |
- weak_factory_.GetWeakPtr(), command_id)); |
- |
- return Response::OK(); |
+ base::Bind(&SendSynthesizePinchGestureResponse, |
+ base::Passed(std::move(callback)))); |
} |
-Response InputHandler::SynthesizeScrollGesture( |
- DevToolsCommandId command_id, |
+void InputHandler::SynthesizeScrollGesture( |
int x, |
int y, |
- const int* x_distance, |
- const int* y_distance, |
- const int* x_overscroll, |
- const int* y_overscroll, |
- const bool* prevent_fling, |
- const int* speed, |
- const std::string* gesture_source_type, |
- const int* repeat_count, |
- const int* repeat_delay_ms, |
- const std::string* interaction_marker_name) { |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ Maybe<int> x_distance, |
+ Maybe<int> y_distance, |
+ Maybe<int> x_overscroll, |
+ Maybe<int> y_overscroll, |
+ Maybe<bool> prevent_fling, |
+ Maybe<int> speed, |
+ Maybe<std::string> gesture_source_type, |
+ Maybe<int> repeat_count, |
+ Maybe<int> repeat_delay_ms, |
+ Maybe<std::string> interaction_marker_name, |
+ std::unique_ptr<SynthesizeScrollGestureCallback> callback) { |
+ if (!host_ || !host_->GetRenderWidgetHost()) { |
+ callback->sendFailure(Response::InternalError()); |
+ return; |
+ } |
SyntheticSmoothScrollGestureParams gesture_params; |
const bool kDefaultPreventFling = true; |
@@ -359,34 +398,33 @@ Response InputHandler::SynthesizeScrollGesture( |
gesture_params.anchor = CssPixelsToPointF(x, y, page_scale_factor_); |
gesture_params.prevent_fling = |
- prevent_fling ? *prevent_fling : kDefaultPreventFling; |
- gesture_params.speed_in_pixels_s = speed ? *speed : kDefaultSpeed; |
+ prevent_fling.fromMaybe(kDefaultPreventFling); |
+ gesture_params.speed_in_pixels_s = speed.fromMaybe(kDefaultSpeed); |
- if (x_distance || y_distance) { |
+ if (x_distance.fromJust() || y_distance.fromJust()) { |
gesture_params.distances.push_back( |
- CssPixelsToVector2dF(x_distance ? *x_distance : 0, |
- y_distance ? *y_distance : 0, page_scale_factor_)); |
+ CssPixelsToVector2dF(x_distance.fromMaybe(0), |
+ y_distance.fromMaybe(0), page_scale_factor_)); |
} |
- if (x_overscroll || y_overscroll) { |
+ if (x_overscroll.isJust() || y_overscroll.isJust()) { |
gesture_params.distances.push_back(CssPixelsToVector2dF( |
- x_overscroll ? -*x_overscroll : 0, y_overscroll ? -*y_overscroll : 0, |
+ -x_overscroll.fromMaybe(0), -y_overscroll.fromMaybe(0), |
page_scale_factor_)); |
} |
if (!StringToGestureSourceType( |
- gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, |
- gesture_params.gesture_source_type)) { |
- return Response::InvalidParams("gestureSourceType"); |
+ std::move(gesture_source_type), |
+ gesture_params.gesture_source_type)) { |
+ callback->sendFailure( |
+ Response::InvalidParams("Unknown gestureSourceType")); |
+ return; |
} |
SynthesizeRepeatingScroll( |
- gesture_params, repeat_count ? *repeat_count : 0, |
- base::TimeDelta::FromMilliseconds(repeat_delay_ms ? *repeat_delay_ms |
- : 250), |
- interaction_marker_name ? *interaction_marker_name : "", command_id); |
- |
- return Response::OK(); |
+ gesture_params, repeat_count.fromMaybe(0), |
+ base::TimeDelta::FromMilliseconds(repeat_delay_ms.fromMaybe(250)), |
+ interaction_marker_name.fromMaybe(""), ++last_id_, std::move(callback)); |
} |
void InputHandler::SynthesizeRepeatingScroll( |
@@ -394,18 +432,20 @@ void InputHandler::SynthesizeRepeatingScroll( |
int repeat_count, |
base::TimeDelta repeat_delay, |
std::string interaction_marker_name, |
- DevToolsCommandId command_id) { |
+ int id, |
+ std::unique_ptr<SynthesizeScrollGestureCallback> callback) { |
if (!interaction_marker_name.empty()) { |
// TODO(alexclarke): Can we move this elsewhere? It doesn't really fit here. |
TRACE_EVENT_COPY_ASYNC_BEGIN0("benchmark", interaction_marker_name.c_str(), |
- command_id.call_id); |
+ id); |
} |
- host_->QueueSyntheticGesture( |
+ host_->GetRenderWidgetHost()->QueueSyntheticGesture( |
SyntheticGesture::Create(gesture_params), |
base::Bind(&InputHandler::OnScrollFinished, weak_factory_.GetWeakPtr(), |
gesture_params, repeat_count, repeat_delay, |
- interaction_marker_name, command_id)); |
+ interaction_marker_name, id, |
+ base::Passed(std::move(callback)))); |
} |
void InputHandler::OnScrollFinished( |
@@ -413,11 +453,12 @@ void InputHandler::OnScrollFinished( |
int repeat_count, |
base::TimeDelta repeat_delay, |
std::string interaction_marker_name, |
- DevToolsCommandId command_id, |
+ int id, |
+ std::unique_ptr<SynthesizeScrollGestureCallback> callback, |
SyntheticGesture::Result result) { |
if (!interaction_marker_name.empty()) { |
TRACE_EVENT_COPY_ASYNC_END0("benchmark", interaction_marker_name.c_str(), |
- command_id.call_id); |
+ id); |
} |
if (repeat_count > 0) { |
@@ -425,102 +466,52 @@ void InputHandler::OnScrollFinished( |
FROM_HERE, |
base::Bind(&InputHandler::SynthesizeRepeatingScroll, |
weak_factory_.GetWeakPtr(), gesture_params, repeat_count - 1, |
- repeat_delay, interaction_marker_name, command_id), |
+ repeat_delay, interaction_marker_name, id, |
+ base::Passed(std::move(callback))), |
repeat_delay); |
} else { |
- SendSynthesizeScrollGestureResponse(command_id, result); |
+ SendSynthesizeScrollGestureResponse(std::move(callback), result); |
} |
} |
-Response InputHandler::SynthesizeTapGesture( |
- DevToolsCommandId command_id, |
+void InputHandler::SynthesizeTapGesture( |
int x, |
int y, |
- const int* duration, |
- const int* tap_count, |
- const std::string* gesture_source_type) { |
- if (!host_) |
- return Response::ServerError("Could not connect to view"); |
+ Maybe<int> duration, |
+ Maybe<int> tap_count, |
+ Maybe<std::string> gesture_source_type, |
+ std::unique_ptr<SynthesizeTapGestureCallback> callback) { |
+ if (!host_ || !host_->GetRenderWidgetHost()) { |
+ callback->sendFailure(Response::InternalError()); |
+ return; |
+ } |
SyntheticTapGestureParams gesture_params; |
const int kDefaultDuration = 50; |
const int kDefaultTapCount = 1; |
gesture_params.position = CssPixelsToPointF(x, y, page_scale_factor_); |
- gesture_params.duration_ms = duration ? *duration : kDefaultDuration; |
+ gesture_params.duration_ms = duration.fromMaybe(kDefaultDuration); |
if (!StringToGestureSourceType( |
- gesture_source_type ? *gesture_source_type : kGestureSourceTypeDefault, |
- gesture_params.gesture_source_type)) { |
- return Response::InvalidParams("gestureSourceType"); |
+ std::move(gesture_source_type), |
caseq
2016/12/14 18:18:18
weird indent.
dgozman
2016/12/15 04:20:08
Done.
|
+ gesture_params.gesture_source_type)) { |
+ callback->sendFailure( |
+ Response::InvalidParams("Unknown gestureSourceType")); |
+ return; |
} |
- if (!tap_count) |
- tap_count = &kDefaultTapCount; |
- |
- for (int i = 0; i < *tap_count; i++) { |
+ int count = tap_count.fromMaybe(kDefaultTapCount); |
+ for (int i = 0; i < count; i++) { |
// If we're doing more than one tap, don't send the response to the client |
// until we've completed the last tap. |
- bool is_last_tap = i == *tap_count - 1; |
- host_->QueueSyntheticGesture( |
+ bool is_last_tap = i == count - 1; |
+ host_->GetRenderWidgetHost()->QueueSyntheticGesture( |
SyntheticGesture::Create(gesture_params), |
- base::Bind(&InputHandler::SendSynthesizeTapGestureResponse, |
- weak_factory_.GetWeakPtr(), command_id, is_last_tap)); |
- } |
- |
- return Response::OK(); |
-} |
- |
-Response InputHandler::DispatchTouchEvent( |
- const std::string& type, |
- const std::vector<std::unique_ptr<base::DictionaryValue>>& touch_points, |
- const int* modifiers, |
- const double* timestamp) { |
- return Response::FallThrough(); |
-} |
- |
-void InputHandler::SendSynthesizePinchGestureResponse( |
- DevToolsCommandId command_id, |
- SyntheticGesture::Result result) { |
- if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
- client_->SendSynthesizePinchGestureResponse( |
- command_id, SynthesizePinchGestureResponse::Create()); |
- } else { |
- client_->SendError(command_id, |
- Response::InternalError(base::StringPrintf( |
- "Synthetic pinch failed, result was %d", result))); |
- } |
-} |
- |
-void InputHandler::SendSynthesizeScrollGestureResponse( |
- DevToolsCommandId command_id, |
- SyntheticGesture::Result result) { |
- if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
- client_->SendSynthesizeScrollGestureResponse( |
- command_id, SynthesizeScrollGestureResponse::Create()); |
- } else { |
- client_->SendError(command_id, |
- Response::InternalError(base::StringPrintf( |
- "Synthetic scroll failed, result was %d", result))); |
- } |
-} |
- |
-void InputHandler::SendSynthesizeTapGestureResponse( |
- DevToolsCommandId command_id, |
- bool send_success, |
- SyntheticGesture::Result result) { |
- if (result == SyntheticGesture::Result::GESTURE_FINISHED) { |
- if (send_success) { |
- client_->SendSynthesizeTapGestureResponse( |
- command_id, SynthesizeTapGestureResponse::Create()); |
- } |
- } else { |
- client_->SendError(command_id, |
- Response::InternalError(base::StringPrintf( |
- "Synthetic tap failed, result was %d", result))); |
+ base::Bind(&SendSynthesizeTapGestureResponse, |
+ base::Passed(std::move(callback)), is_last_tap)); |
caseq
2016/12/14 18:18:18
This will not have the result you expect. Do we ha
dgozman
2016/12/15 04:20:08
I guess the only tests we have for this are teleme
|
} |
} |
-} // namespace input |
-} // namespace devtools |
+} // namespace protocol |
} // namespace content |