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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_impl.h" 5 #include "content/browser/renderer_host/render_widget_host_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size()); 1049 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size());
1050 1050
1051 gesture_event_filter_->FlingHasBeenHalted(); 1051 gesture_event_filter_->FlingHasBeenHalted();
1052 1052
1053 // Only forward the non-native portions of our event. 1053 // Only forward the non-native portions of our event.
1054 ForwardInputEvent(key_event, sizeof(WebKeyboardEvent), 1054 ForwardInputEvent(key_event, sizeof(WebKeyboardEvent),
1055 is_keyboard_shortcut); 1055 is_keyboard_shortcut);
1056 } 1056 }
1057 } 1057 }
1058 1058
1059 void RenderWidgetHostImpl::SendInputEvent(const WebInputEvent& input_event,
1060 int event_size,
1061 bool is_keyboard_shortcut) {
1062 IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_);
1063 message->WriteData(
1064 reinterpret_cast<const char*>(&input_event), event_size);
1065 // |is_keyboard_shortcut| only makes sense for RawKeyDown events.
1066 if (input_event.type == WebInputEvent::RawKeyDown)
1067 message->WriteBool(is_keyboard_shortcut);
1068 input_event_start_time_ = TimeTicks::Now();
1069 Send(message);
1070 increment_in_flight_event_count();
1071 }
1072
1059 void RenderWidgetHostImpl::ForwardInputEvent(const WebInputEvent& input_event, 1073 void RenderWidgetHostImpl::ForwardInputEvent(const WebInputEvent& input_event,
1060 int event_size, 1074 int event_size,
1061 bool is_keyboard_shortcut) { 1075 bool is_keyboard_shortcut) {
1062 TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::ForwardInputEvent"); 1076 TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::ForwardInputEvent");
1063 1077
1064 if (!process_->HasConnection()) 1078 if (!process_->HasConnection())
1065 return; 1079 return;
1066 1080
1067 DCHECK(!process_->IgnoreInputEvents()); 1081 DCHECK(!process_->IgnoreInputEvents());
1068 1082
1069 in_process_event_types_.push(input_event.type); 1083 in_process_event_types_.push(input_event.type);
1070 1084
1071 IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_); 1085 // Transmit any pending wheel events on a non-wheel event. This ensures that
1072 message->WriteData( 1086 // the renderer receives the final PhaseEnded wheel event, which is necessary
1073 reinterpret_cast<const char*>(&input_event), event_size); 1087 // to terminate rubber-banding, for example.
1074 // |is_keyboard_shortcut| only makes sense for RawKeyDown events. 1088 if (input_event.type != WebInputEvent::MouseWheel) {
1075 if (input_event.type == WebInputEvent::RawKeyDown) 1089 for (size_t i = 0; i < coalesced_mouse_wheel_events_.size(); ++i) {
1076 message->WriteBool(is_keyboard_shortcut); 1090 SendInputEvent(coalesced_mouse_wheel_events_[i],
1077 input_event_start_time_ = TimeTicks::Now(); 1091 sizeof(WebMouseWheelEvent), false);
1078 Send(message); 1092 }
1093 coalesced_mouse_wheel_events_.clear();
1094 }
1079 1095
1080 // Any non-wheel input event cancels pending wheel events. 1096 SendInputEvent(input_event, event_size, is_keyboard_shortcut);
1081 if (input_event.type != WebInputEvent::MouseWheel)
1082 coalesced_mouse_wheel_events_.clear();
1083 1097
1084 // Any input event cancels a pending mouse move event. Note that 1098 // Any input event cancels a pending mouse move event. Note that
1085 // |next_mouse_move_| possibly owns |input_event|, so don't use |input_event| 1099 // |next_mouse_move_| possibly owns |input_event|, so don't use |input_event|
1086 // after this line. 1100 // after this line.
1087 next_mouse_move_.reset(); 1101 next_mouse_move_.reset();
1088 1102
1089 increment_in_flight_event_count();
1090 StartHangMonitorTimeout( 1103 StartHangMonitorTimeout(
1091 TimeDelta::FromMilliseconds(hung_renderer_delay_ms_)); 1104 TimeDelta::FromMilliseconds(hung_renderer_delay_ms_));
1092 } 1105 }
1093 1106
1094 void RenderWidgetHostImpl::ForwardTouchEvent( 1107 void RenderWidgetHostImpl::ForwardTouchEvent(
1095 const WebKit::WebTouchEvent& touch_event) { 1108 const WebKit::WebTouchEvent& touch_event) {
1096 touch_event_queue_->QueueEvent(touch_event); 1109 touch_event_queue_->QueueEvent(touch_event);
1097 } 1110 }
1098 1111
1099 #if defined(TOOLKIT_GTK) 1112 #if defined(TOOLKIT_GTK)
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2261 return; 2274 return;
2262 2275
2263 OnRenderAutoResized(new_size); 2276 OnRenderAutoResized(new_size);
2264 } 2277 }
2265 2278
2266 void RenderWidgetHostImpl::DetachDelegate() { 2279 void RenderWidgetHostImpl::DetachDelegate() {
2267 delegate_ = NULL; 2280 delegate_ = NULL;
2268 } 2281 }
2269 2282
2270 } // namespace content 2283 } // namespace content
OLDNEW
« 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