Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1525)

Unified Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 11411016: [Mac] Fix issue where rubber-banding may get sporadically stuck. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_impl.cc
===================================================================
--- content/browser/renderer_host/render_widget_host_impl.cc (revision 167782)
+++ content/browser/renderer_host/render_widget_host_impl.cc (working copy)
@@ -1056,6 +1056,20 @@
}
}
+void RenderWidgetHostImpl::SendInputEvent(const WebInputEvent& input_event,
+ int event_size,
+ bool is_keyboard_shortcut) {
+ IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_);
+ message->WriteData(
+ reinterpret_cast<const char*>(&input_event), event_size);
+ // |is_keyboard_shortcut| only makes sense for RawKeyDown events.
+ if (input_event.type == WebInputEvent::RawKeyDown)
+ message->WriteBool(is_keyboard_shortcut);
+ input_event_start_time_ = TimeTicks::Now();
+ Send(message);
+ increment_in_flight_event_count();
+}
+
void RenderWidgetHostImpl::ForwardInputEvent(const WebInputEvent& input_event,
int event_size,
bool is_keyboard_shortcut) {
@@ -1068,25 +1082,24 @@
in_process_event_types_.push(input_event.type);
- IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_);
- message->WriteData(
- reinterpret_cast<const char*>(&input_event), event_size);
- // |is_keyboard_shortcut| only makes sense for RawKeyDown events.
- if (input_event.type == WebInputEvent::RawKeyDown)
- message->WriteBool(is_keyboard_shortcut);
- input_event_start_time_ = TimeTicks::Now();
- Send(message);
-
- // Any non-wheel input event cancels pending wheel events.
- if (input_event.type != WebInputEvent::MouseWheel)
+ // Transmit any pending wheel events on a non-wheel event. This ensures that
+ // the renderer receives the final PhaseEnded wheel event, which is necessary
+ // to terminate rubber-banding, for example.
+ if (input_event.type != WebInputEvent::MouseWheel) {
+ for (size_t i = 0; i < coalesced_mouse_wheel_events_.size(); ++i) {
+ SendInputEvent(coalesced_mouse_wheel_events_[i],
+ sizeof(WebMouseWheelEvent), false);
+ }
coalesced_mouse_wheel_events_.clear();
+ }
+ SendInputEvent(input_event, event_size, is_keyboard_shortcut);
+
// Any input event cancels a pending mouse move event. Note that
// |next_mouse_move_| possibly owns |input_event|, so don't use |input_event|
// after this line.
next_mouse_move_.reset();
- increment_in_flight_event_count();
StartHangMonitorTimeout(
TimeDelta::FromMilliseconds(hung_renderer_delay_ms_));
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698