Index: content/browser/renderer_host/render_widget_host.cc |
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc |
index 9af103c2847794316905026edf21287712a3bf18..4ae3695999afd4bb1fb2bd0541c2b9f2e0eafdcc 100644 |
--- a/content/browser/renderer_host/render_widget_host.cc |
+++ b/content/browser/renderer_host/render_widget_host.cc |
@@ -75,6 +75,8 @@ RenderWidgetHost::RenderWidgetHost(RenderProcessHost* process, |
resize_ack_pending_(false), |
mouse_move_pending_(false), |
mouse_wheel_pending_(false), |
+ touch_move_pending_(false), |
+ touch_event_is_queued_(false), |
needs_repainting_on_restore_(false), |
is_unresponsive_(false), |
in_get_backing_store_(false), |
@@ -643,13 +645,25 @@ void RenderWidgetHost::ForwardInputEvent(const WebInputEvent& input_event, |
StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kHungRendererDelayMs)); |
} |
-#if defined(TOUCH_UI) |
void RenderWidgetHost::ForwardTouchEvent( |
const WebKit::WebTouchEvent& touch_event) { |
TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardTouchEvent"); |
+ if (ignore_input_events_ || process_->ignore_input_events()) |
+ return; |
+ |
+ if (touch_event.type == WebInputEvent::TouchMove && |
+ touch_move_pending_) { |
+ touch_event_is_queued_ = true; |
+ queued_touch_event_ = touch_event; |
+ return; |
+ } |
+ |
+ if (touch_event.type == WebInputEvent::TouchMove) |
+ touch_move_pending_ = true; |
+ else |
+ touch_move_pending_ = false; |
ForwardInputEvent(touch_event, sizeof(WebKit::WebTouchEvent), false); |
} |
-#endif |
void RenderWidgetHost::RendererExited(base::TerminationStatus status, |
int exit_code) { |
@@ -663,6 +677,8 @@ void RenderWidgetHost::RendererExited(base::TerminationStatus status, |
next_mouse_move_.reset(); |
mouse_wheel_pending_ = false; |
coalesced_mouse_wheel_events_.clear(); |
+ touch_move_pending_ = false; |
+ touch_event_is_queued_ = false; |
// Must reset these to ensure that keyboard events work with a new renderer. |
key_queue_.clear(); |
@@ -992,6 +1008,12 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) { |
} |
ProcessKeyboardEventAck(type, processed); |
+ } else if (type == WebInputEvent::TouchMove) { |
+ touch_move_pending_ = false; |
+ if (touch_event_is_queued_) { |
+ touch_event_is_queued_ = false; |
+ ForwardTouchEvent(queued_touch_event_); |
+ } |
} |
// This is used only for testing. |
NotificationService::current()->Notify( |