| OLD | NEW |
| 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 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 #include <tuple> | 10 #include <tuple> |
| (...skipping 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1035 return; | 1035 return; |
| 1036 } | 1036 } |
| 1037 | 1037 |
| 1038 ForwardMouseEventWithLatencyInfo(mouse_event, | 1038 ForwardMouseEventWithLatencyInfo(mouse_event, |
| 1039 ui::LatencyInfo(ui::SourceEventType::OTHER)); | 1039 ui::LatencyInfo(ui::SourceEventType::OTHER)); |
| 1040 if (owner_delegate_) | 1040 if (owner_delegate_) |
| 1041 owner_delegate_->RenderWidgetDidForwardMouseEvent(mouse_event); | 1041 owner_delegate_->RenderWidgetDidForwardMouseEvent(mouse_event); |
| 1042 } | 1042 } |
| 1043 | 1043 |
| 1044 void RenderWidgetHostImpl::ForwardMouseEventWithLatencyInfo( | 1044 void RenderWidgetHostImpl::ForwardMouseEventWithLatencyInfo( |
| 1045 const blink::WebMouseEvent& mouse_event, | 1045 const blink::WebMouseEvent& mouse_event, |
| 1046 const ui::LatencyInfo& ui_latency) { | 1046 const ui::LatencyInfo& latency) { |
| 1047 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardMouseEvent", "x", | 1047 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardMouseEvent", "x", |
| 1048 mouse_event.PositionInWidget().x, "y", | 1048 mouse_event.PositionInWidget().x, "y", |
| 1049 mouse_event.PositionInWidget().y); | 1049 mouse_event.PositionInWidget().y); |
| 1050 | 1050 |
| 1051 for (size_t i = 0; i < mouse_event_callbacks_.size(); ++i) { | 1051 for (size_t i = 0; i < mouse_event_callbacks_.size(); ++i) { |
| 1052 if (mouse_event_callbacks_[i].Run(mouse_event)) | 1052 if (mouse_event_callbacks_[i].Run(mouse_event)) |
| 1053 return; | 1053 return; |
| 1054 } | 1054 } |
| 1055 | 1055 |
| 1056 if (ShouldDropInputEvents()) | 1056 if (ShouldDropInputEvents()) |
| 1057 return; | 1057 return; |
| 1058 | 1058 |
| 1059 if (touch_emulator_ && touch_emulator_->HandleMouseEvent(mouse_event)) | 1059 if (touch_emulator_ && touch_emulator_->HandleMouseEvent(mouse_event)) |
| 1060 return; | 1060 return; |
| 1061 | 1061 |
| 1062 MouseEventWithLatencyInfo mouse_with_latency(mouse_event, ui_latency); | 1062 MouseEventWithLatencyInfo mouse_with_latency(mouse_event, latency); |
| 1063 DispatchInputEventWithLatencyInfo(mouse_event, &mouse_with_latency.latency); | 1063 DispatchInputEventWithLatencyInfo(mouse_event, &mouse_with_latency.latency); |
| 1064 input_router_->SendMouseEvent(mouse_with_latency); | 1064 input_router_->SendMouseEvent(mouse_with_latency); |
| 1065 } | 1065 } |
| 1066 | 1066 |
| 1067 void RenderWidgetHostImpl::ForwardWheelEvent( | 1067 void RenderWidgetHostImpl::ForwardWheelEvent( |
| 1068 const WebMouseWheelEvent& wheel_event) { | 1068 const WebMouseWheelEvent& wheel_event) { |
| 1069 ForwardWheelEventWithLatencyInfo(wheel_event, | 1069 ForwardWheelEventWithLatencyInfo(wheel_event, |
| 1070 ui::LatencyInfo(ui::SourceEventType::WHEEL)); | 1070 ui::LatencyInfo(ui::SourceEventType::WHEEL)); |
| 1071 } | 1071 } |
| 1072 | 1072 |
| 1073 void RenderWidgetHostImpl::ForwardWheelEventWithLatencyInfo( | 1073 void RenderWidgetHostImpl::ForwardWheelEventWithLatencyInfo( |
| 1074 const blink::WebMouseWheelEvent& wheel_event, | 1074 const blink::WebMouseWheelEvent& wheel_event, |
| 1075 const ui::LatencyInfo& ui_latency) { | 1075 const ui::LatencyInfo& latency) { |
| 1076 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardWheelEvent", "dx", | 1076 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardWheelEvent", "dx", |
| 1077 wheel_event.delta_x, "dy", wheel_event.delta_y); | 1077 wheel_event.delta_x, "dy", wheel_event.delta_y); |
| 1078 | 1078 |
| 1079 if (ShouldDropInputEvents()) | 1079 if (ShouldDropInputEvents()) |
| 1080 return; | 1080 return; |
| 1081 | 1081 |
| 1082 if (touch_emulator_ && touch_emulator_->HandleMouseWheelEvent(wheel_event)) | 1082 if (touch_emulator_ && touch_emulator_->HandleMouseWheelEvent(wheel_event)) |
| 1083 return; | 1083 return; |
| 1084 | 1084 |
| 1085 MouseWheelEventWithLatencyInfo wheel_with_latency(wheel_event, ui_latency); | 1085 MouseWheelEventWithLatencyInfo wheel_with_latency(wheel_event, latency); |
| 1086 DispatchInputEventWithLatencyInfo(wheel_event, &wheel_with_latency.latency); | 1086 DispatchInputEventWithLatencyInfo(wheel_event, &wheel_with_latency.latency); |
| 1087 input_router_->SendWheelEvent(wheel_with_latency); | 1087 input_router_->SendWheelEvent(wheel_with_latency); |
| 1088 } | 1088 } |
| 1089 | 1089 |
| 1090 void RenderWidgetHostImpl::ForwardEmulatedGestureEvent( | 1090 void RenderWidgetHostImpl::ForwardEmulatedGestureEvent( |
| 1091 const blink::WebGestureEvent& gesture_event) { | 1091 const blink::WebGestureEvent& gesture_event) { |
| 1092 ForwardGestureEvent(gesture_event); | 1092 ForwardGestureEvent(gesture_event); |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 void RenderWidgetHostImpl::ForwardGestureEvent( | 1095 void RenderWidgetHostImpl::ForwardGestureEvent( |
| 1096 const blink::WebGestureEvent& gesture_event) { | 1096 const blink::WebGestureEvent& gesture_event) { |
| 1097 ForwardGestureEventWithLatencyInfo( | 1097 ForwardGestureEventWithLatencyInfo( |
| 1098 gesture_event, | 1098 gesture_event, |
| 1099 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( | 1099 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( |
| 1100 gesture_event)); | 1100 gesture_event)); |
| 1101 } | 1101 } |
| 1102 | 1102 |
| 1103 void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo( | 1103 void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo( |
| 1104 const blink::WebGestureEvent& gesture_event, | 1104 const blink::WebGestureEvent& gesture_event, |
| 1105 const ui::LatencyInfo& ui_latency) { | 1105 const ui::LatencyInfo& latency) { |
| 1106 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardGestureEvent"); | 1106 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardGestureEvent"); |
| 1107 // Early out if necessary, prior to performing latency logic. | 1107 // Early out if necessary, prior to performing latency logic. |
| 1108 if (ShouldDropInputEvents()) | 1108 if (ShouldDropInputEvents()) |
| 1109 return; | 1109 return; |
| 1110 | 1110 |
| 1111 // TODO(wjmaclean) Remove the code for supporting resending gesture events | 1111 // TODO(wjmaclean) Remove the code for supporting resending gesture events |
| 1112 // when WebView transitions to OOPIF and BrowserPlugin is removed. | 1112 // when WebView transitions to OOPIF and BrowserPlugin is removed. |
| 1113 // http://crbug.com/533069 | 1113 // http://crbug.com/533069 |
| 1114 bool* is_in_gesture_scroll = | 1114 bool* is_in_gesture_scroll = |
| 1115 gesture_event.source_device == | 1115 gesture_event.source_device == |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1146 ForwardGestureEventWithLatencyInfo( | 1146 ForwardGestureEventWithLatencyInfo( |
| 1147 CreateScrollBeginForWrapping(gesture_event), | 1147 CreateScrollBeginForWrapping(gesture_event), |
| 1148 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( | 1148 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( |
| 1149 gesture_event)); | 1149 gesture_event)); |
| 1150 } | 1150 } |
| 1151 | 1151 |
| 1152 // Delegate must be non-null, due to |ShouldDropInputEvents()| test. | 1152 // Delegate must be non-null, due to |ShouldDropInputEvents()| test. |
| 1153 if (delegate_->PreHandleGestureEvent(gesture_event)) | 1153 if (delegate_->PreHandleGestureEvent(gesture_event)) |
| 1154 return; | 1154 return; |
| 1155 | 1155 |
| 1156 GestureEventWithLatencyInfo gesture_with_latency(gesture_event, ui_latency); | 1156 GestureEventWithLatencyInfo gesture_with_latency(gesture_event, latency); |
| 1157 DispatchInputEventWithLatencyInfo(gesture_event, | 1157 DispatchInputEventWithLatencyInfo(gesture_event, |
| 1158 &gesture_with_latency.latency); | 1158 &gesture_with_latency.latency); |
| 1159 input_router_->SendGestureEvent(gesture_with_latency); | 1159 input_router_->SendGestureEvent(gesture_with_latency); |
| 1160 | 1160 |
| 1161 if (scroll_update_needs_wrapping) { | 1161 if (scroll_update_needs_wrapping) { |
| 1162 ForwardGestureEventWithLatencyInfo( | 1162 ForwardGestureEventWithLatencyInfo( |
| 1163 CreateScrollEndForWrapping(gesture_event), | 1163 CreateScrollEndForWrapping(gesture_event), |
| 1164 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( | 1164 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent( |
| 1165 gesture_event)); | 1165 gesture_event)); |
| 1166 } | 1166 } |
| 1167 } | 1167 } |
| 1168 | 1168 |
| 1169 void RenderWidgetHostImpl::ForwardEmulatedTouchEvent( | 1169 void RenderWidgetHostImpl::ForwardEmulatedTouchEvent( |
| 1170 const blink::WebTouchEvent& touch_event) { | 1170 const blink::WebTouchEvent& touch_event) { |
| 1171 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardEmulatedTouchEvent"); | 1171 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardEmulatedTouchEvent"); |
| 1172 ui::LatencyInfo latency_info(ui::SourceEventType::TOUCH); | 1172 ui::LatencyInfo latency_info(ui::SourceEventType::TOUCH); |
| 1173 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); | 1173 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); |
| 1174 DispatchInputEventWithLatencyInfo(touch_event, &touch_with_latency.latency); | 1174 DispatchInputEventWithLatencyInfo(touch_event, &touch_with_latency.latency); |
| 1175 input_router_->SendTouchEvent(touch_with_latency); | 1175 input_router_->SendTouchEvent(touch_with_latency); |
| 1176 } | 1176 } |
| 1177 | 1177 |
| 1178 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo( | 1178 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo( |
| 1179 const blink::WebTouchEvent& touch_event, | 1179 const blink::WebTouchEvent& touch_event, |
| 1180 const ui::LatencyInfo& ui_latency) { | 1180 const ui::LatencyInfo& latency) { |
| 1181 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent"); | 1181 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent"); |
| 1182 | 1182 |
| 1183 // Always forward TouchEvents for touch stream consistency. They will be | 1183 // Always forward TouchEvents for touch stream consistency. They will be |
| 1184 // ignored if appropriate in FilterInputEvent(). | 1184 // ignored if appropriate in FilterInputEvent(). |
| 1185 | 1185 |
| 1186 TouchEventWithLatencyInfo touch_with_latency(touch_event, ui_latency); | 1186 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency); |
| 1187 if (touch_emulator_ && | 1187 if (touch_emulator_ && |
| 1188 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) { | 1188 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) { |
| 1189 if (view_) { | 1189 if (view_) { |
| 1190 view_->ProcessAckedTouchEvent( | 1190 view_->ProcessAckedTouchEvent( |
| 1191 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED); | 1191 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 1192 } | 1192 } |
| 1193 return; | 1193 return; |
| 1194 } | 1194 } |
| 1195 | 1195 |
| 1196 DispatchInputEventWithLatencyInfo(touch_event, &touch_with_latency.latency); | 1196 DispatchInputEventWithLatencyInfo(touch_event, &touch_with_latency.latency); |
| 1197 input_router_->SendTouchEvent(touch_with_latency); | 1197 input_router_->SendTouchEvent(touch_with_latency); |
| 1198 } | 1198 } |
| 1199 | 1199 |
| 1200 void RenderWidgetHostImpl::ForwardKeyboardEvent( | 1200 void RenderWidgetHostImpl::ForwardKeyboardEventWithLatencyInfo( |
| 1201 const NativeWebKeyboardEvent& key_event) { | 1201 const NativeWebKeyboardEvent& key_event, |
| 1202 ForwardKeyboardEventWithCommands(key_event, nullptr, nullptr); | 1202 const ui::LatencyInfo& latency) { |
| 1203 ForwardKeyboardEventWithCommands(key_event, latency, nullptr, nullptr); |
| 1203 } | 1204 } |
| 1204 | 1205 |
| 1205 void RenderWidgetHostImpl::ForwardKeyboardEventWithCommands( | 1206 void RenderWidgetHostImpl::ForwardKeyboardEventWithCommands( |
| 1206 const NativeWebKeyboardEvent& key_event, | 1207 const NativeWebKeyboardEvent& key_event, |
| 1208 const ui::LatencyInfo& latency, |
| 1207 const std::vector<EditCommand>* commands, | 1209 const std::vector<EditCommand>* commands, |
| 1208 bool* update_event) { | 1210 bool* update_event) { |
| 1209 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardKeyboardEvent"); | 1211 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardKeyboardEvent"); |
| 1210 if (owner_delegate_ && | 1212 if (owner_delegate_ && |
| 1211 !owner_delegate_->MayRenderWidgetForwardKeyboardEvent(key_event)) { | 1213 !owner_delegate_->MayRenderWidgetForwardKeyboardEvent(key_event)) { |
| 1212 return; | 1214 return; |
| 1213 } | 1215 } |
| 1214 | 1216 |
| 1215 if (ShouldDropInputEvents()) | 1217 if (ShouldDropInputEvents()) |
| 1216 return; | 1218 return; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1273 is_shortcut = true; | 1275 is_shortcut = true; |
| 1274 break; | 1276 break; |
| 1275 } | 1277 } |
| 1276 | 1278 |
| 1277 if (key_event.GetType() == WebKeyboardEvent::kRawKeyDown) | 1279 if (key_event.GetType() == WebKeyboardEvent::kRawKeyDown) |
| 1278 suppress_events_until_keydown_ = false; | 1280 suppress_events_until_keydown_ = false; |
| 1279 } | 1281 } |
| 1280 | 1282 |
| 1281 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event)) | 1283 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event)) |
| 1282 return; | 1284 return; |
| 1283 ui::LatencyInfo latency_info(ui::SourceEventType::OTHER); | |
| 1284 NativeWebKeyboardEventWithLatencyInfo key_event_with_latency(key_event, | 1285 NativeWebKeyboardEventWithLatencyInfo key_event_with_latency(key_event, |
| 1285 latency_info); | 1286 latency); |
| 1286 key_event_with_latency.event.is_browser_shortcut = is_shortcut; | 1287 key_event_with_latency.event.is_browser_shortcut = is_shortcut; |
| 1287 DispatchInputEventWithLatencyInfo(key_event, &key_event_with_latency.latency); | 1288 DispatchInputEventWithLatencyInfo(key_event, &key_event_with_latency.latency); |
| 1288 // TODO(foolip): |InputRouter::SendKeyboardEvent()| may filter events, in | 1289 // TODO(foolip): |InputRouter::SendKeyboardEvent()| may filter events, in |
| 1289 // which the commands will be treated as belonging to the next key event. | 1290 // which the commands will be treated as belonging to the next key event. |
| 1290 // InputMsg_SetEditCommandsForNextKeyEvent should only be sent if | 1291 // InputMsg_SetEditCommandsForNextKeyEvent should only be sent if |
| 1291 // InputMsg_HandleInputEvent is, but has to be sent first. | 1292 // InputMsg_HandleInputEvent is, but has to be sent first. |
| 1292 // https://crbug.com/684298 | 1293 // https://crbug.com/684298 |
| 1293 if (commands && !commands->empty()) { | 1294 if (commands && !commands->empty()) { |
| 1294 Send( | 1295 Send( |
| 1295 new InputMsg_SetEditCommandsForNextKeyEvent(GetRoutingID(), *commands)); | 1296 new InputMsg_SetEditCommandsForNextKeyEvent(GetRoutingID(), *commands)); |
| (...skipping 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2635 RenderProcessHost* rph = GetProcess(); | 2636 RenderProcessHost* rph = GetProcess(); |
| 2636 for (std::vector<IPC::Message>::const_iterator i = messages.begin(); | 2637 for (std::vector<IPC::Message>::const_iterator i = messages.begin(); |
| 2637 i != messages.end(); ++i) { | 2638 i != messages.end(); ++i) { |
| 2638 rph->OnMessageReceived(*i); | 2639 rph->OnMessageReceived(*i); |
| 2639 if (i->dispatch_error()) | 2640 if (i->dispatch_error()) |
| 2640 rph->OnBadMessageReceived(*i); | 2641 rph->OnBadMessageReceived(*i); |
| 2641 } | 2642 } |
| 2642 } | 2643 } |
| 2643 | 2644 |
| 2644 } // namespace content | 2645 } // namespace content |
| OLD | NEW |