| Index: content/browser/renderer_host/input/touch_emulator.cc
|
| diff --git a/content/browser/renderer_host/input/touch_emulator.cc b/content/browser/renderer_host/input/touch_emulator.cc
|
| index 61ae63ef1fffa283ce8a9e543cefadf9ebc8002b..58bcf3cef313536fcd510b69c4a337ae468584bd 100644
|
| --- a/content/browser/renderer_host/input/touch_emulator.cc
|
| +++ b/content/browser/renderer_host/input/touch_emulator.cc
|
| @@ -29,7 +29,7 @@ namespace {
|
|
|
| ui::GestureProvider::Config GetGestureProviderConfig() {
|
| // TODO(dgozman): Use different configs to emulate mobile/desktop as
|
| - // requested by renderer.
|
| + // requested by renderer, crbug/425586.
|
| ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
|
| config.gesture_begin_end_types_enabled = false;
|
| config.gesture_detector_config.swipe_enabled = false;
|
| @@ -157,11 +157,15 @@ bool TouchEmulator::HandleMouseEvent(const WebMouseEvent& mouse_event) {
|
|
|
| UpdateShiftPressed((mouse_event.modifiers & WebInputEvent::ShiftKey) != 0);
|
|
|
| - if (FillTouchEventAndPoint(mouse_event) &&
|
| - gesture_provider_.OnTouchEvent(MotionEventWeb(touch_event_))) {
|
| - ForwardTouchEventToClient();
|
| + if (mouse_event.type != WebInputEvent::MouseDown &&
|
| + mouse_event.type != WebInputEvent::MouseMove &&
|
| + mouse_event.type != WebInputEvent::MouseUp) {
|
| + return true;
|
| }
|
|
|
| + FillTouchEventAndPoint(mouse_event);
|
| + HandleEmulatedTouchEvent(touch_event_);
|
| +
|
| // Do not pass mouse events to the renderer.
|
| return true;
|
| }
|
| @@ -212,7 +216,11 @@ bool TouchEmulator::HandleTouchEvent(const blink::WebTouchEvent& event) {
|
| return false;
|
| }
|
|
|
| -void TouchEmulator::ForwardTouchEventToClient() {
|
| +void TouchEmulator::HandleEmulatedTouchEvent(blink::WebTouchEvent event) {
|
| + auto result = gesture_provider_.OnTouchEvent(MotionEventWeb(event));
|
| + if (!result.succeeded)
|
| + return;
|
| +
|
| const bool event_consumed = true;
|
| // Block emulated event when emulated native stream is active.
|
| if (native_stream_active_sequence_count_) {
|
| @@ -220,8 +228,7 @@ void TouchEmulator::ForwardTouchEventToClient() {
|
| return;
|
| }
|
|
|
| - bool is_sequence_start =
|
| - WebTouchEventTraits::IsTouchSequenceStart(touch_event_);
|
| + bool is_sequence_start = WebTouchEventTraits::IsTouchSequenceStart(event);
|
| // Do not allow middle-sequence event to pass through, if start was blocked.
|
| if (!emulated_stream_active_sequence_count_ && !is_sequence_start) {
|
| gesture_provider_.OnTouchEventAck(event_consumed);
|
| @@ -230,7 +237,9 @@ void TouchEmulator::ForwardTouchEventToClient() {
|
|
|
| if (is_sequence_start)
|
| emulated_stream_active_sequence_count_++;
|
| - client_->ForwardEmulatedTouchEvent(touch_event_);
|
| +
|
| + event.causesScrollingIfUncanceled = result.did_generate_scroll;
|
| + client_->ForwardEmulatedTouchEvent(event);
|
| }
|
|
|
| bool TouchEmulator::HandleTouchEventAck(
|
| @@ -326,9 +335,8 @@ void TouchEmulator::CancelTouch() {
|
| WebInputEvent::TouchCancel,
|
| (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(),
|
| &touch_event_);
|
| - if (gesture_provider_.GetCurrentDownEvent() &&
|
| - gesture_provider_.OnTouchEvent(MotionEventWeb(touch_event_)))
|
| - ForwardTouchEventToClient();
|
| + if (gesture_provider_.GetCurrentDownEvent())
|
| + HandleEmulatedTouchEvent(touch_event_);
|
| }
|
|
|
| void TouchEmulator::UpdateCursor() {
|
| @@ -393,13 +401,7 @@ void TouchEmulator::ScrollEnd(const WebGestureEvent& event) {
|
| client_->ForwardGestureEvent(scroll_event);
|
| }
|
|
|
| -bool TouchEmulator::FillTouchEventAndPoint(const WebMouseEvent& mouse_event) {
|
| - if (mouse_event.type != WebInputEvent::MouseDown &&
|
| - mouse_event.type != WebInputEvent::MouseMove &&
|
| - mouse_event.type != WebInputEvent::MouseUp) {
|
| - return false;
|
| - }
|
| -
|
| +void TouchEmulator::FillTouchEventAndPoint(const WebMouseEvent& mouse_event) {
|
| WebInputEvent::Type eventType;
|
| switch (mouse_event.type) {
|
| case WebInputEvent::MouseDown:
|
| @@ -413,7 +415,7 @@ bool TouchEmulator::FillTouchEventAndPoint(const WebMouseEvent& mouse_event) {
|
| break;
|
| default:
|
| eventType = WebInputEvent::Undefined;
|
| - NOTREACHED();
|
| + NOTREACHED() << "Invalid event for touch emulation: " << mouse_event.type;
|
| }
|
| touch_event_.touchesLength = 1;
|
| touch_event_.modifiers = mouse_event.modifiers;
|
| @@ -430,8 +432,6 @@ bool TouchEmulator::FillTouchEventAndPoint(const WebMouseEvent& mouse_event) {
|
| point.screenPosition.x = mouse_event.globalX;
|
| point.position.y = mouse_event.y;
|
| point.screenPosition.y = mouse_event.globalY;
|
| -
|
| - return true;
|
| }
|
|
|
| bool TouchEmulator::InPinchGestureMode() const {
|
|
|