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

Side by Side Diff: content/browser/renderer_host/input/input_router_impl.cc

Issue 67383002: Initial browser-side implementation for touch-action (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tweak include for moved synthetic_web_input_event_builders.h Created 7 years 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/input/input_router_impl.h" 5 #include "content/browser/renderer_host/input/input_router_impl.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "content/browser/renderer_host/input/gesture_event_filter.h" 10 #include "content/browser/renderer_host/input/gesture_event_filter.h"
11 #include "content/browser/renderer_host/input/input_ack_handler.h" 11 #include "content/browser/renderer_host/input/input_ack_handler.h"
12 #include "content/browser/renderer_host/input/input_router_client.h" 12 #include "content/browser/renderer_host/input/input_router_client.h"
13 #include "content/browser/renderer_host/input/touch_event_queue.h" 13 #include "content/browser/renderer_host/input/touch_event_queue.h"
14 #include "content/browser/renderer_host/input/touchpad_tap_suppression_controlle r.h" 14 #include "content/browser/renderer_host/input/touchpad_tap_suppression_controlle r.h"
15 #include "content/browser/renderer_host/overscroll_controller.h" 15 #include "content/browser/renderer_host/overscroll_controller.h"
16 #include "content/common/content_constants_internal.h" 16 #include "content/common/content_constants_internal.h"
17 #include "content/common/edit_command.h" 17 #include "content/common/edit_command.h"
18 #include "content/common/input/touch_action.h"
18 #include "content/common/input/web_input_event_traits.h" 19 #include "content/common/input/web_input_event_traits.h"
19 #include "content/common/input_messages.h" 20 #include "content/common/input_messages.h"
20 #include "content/common/view_messages.h" 21 #include "content/common/view_messages.h"
21 #include "content/port/common/input_event_ack_state.h" 22 #include "content/port/common/input_event_ack_state.h"
22 #include "content/public/browser/notification_service.h" 23 #include "content/public/browser/notification_service.h"
23 #include "content/public/browser/notification_types.h" 24 #include "content/public/browser/notification_types.h"
24 #include "content/public/browser/user_metrics.h" 25 #include "content/public/browser/user_metrics.h"
25 #include "content/public/common/content_switches.h" 26 #include "content/public/common/content_switches.h"
26 #include "ipc/ipc_sender.h" 27 #include "ipc/ipc_sender.h"
27 #include "ui/events/event.h" 28 #include "ui/events/event.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size()); 170 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size());
170 171
171 gesture_event_filter_->FlingHasBeenHalted(); 172 gesture_event_filter_->FlingHasBeenHalted();
172 173
173 // Only forward the non-native portions of our event. 174 // Only forward the non-native portions of our event.
174 FilterAndSendWebInputEvent(key_event, latency_info, is_keyboard_shortcut); 175 FilterAndSendWebInputEvent(key_event, latency_info, is_keyboard_shortcut);
175 } 176 }
176 177
177 void InputRouterImpl::SendGestureEvent( 178 void InputRouterImpl::SendGestureEvent(
178 const GestureEventWithLatencyInfo& gesture_event) { 179 const GestureEventWithLatencyInfo& gesture_event) {
180 if (touch_action_filter_.FilterGestureEvent(gesture_event.event))
181 return;
182
179 HandleGestureScroll(gesture_event); 183 HandleGestureScroll(gesture_event);
180 184
181 if (!IsInOverscrollGesture() && 185 if (!IsInOverscrollGesture() &&
182 !gesture_event_filter_->ShouldForward(gesture_event)) { 186 !gesture_event_filter_->ShouldForward(gesture_event)) {
183 OverscrollController* controller = client_->GetOverscrollController(); 187 OverscrollController* controller = client_->GetOverscrollController();
184 if (controller) 188 if (controller)
185 controller->DiscardingGestureEvent(gesture_event.event); 189 controller->DiscardingGestureEvent(gesture_event.event);
186 return; 190 return;
187 } 191 }
188 192
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 247
244 bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) { 248 bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) {
245 bool handled = true; 249 bool handled = true;
246 bool message_is_ok = true; 250 bool message_is_ok = true;
247 IPC_BEGIN_MESSAGE_MAP_EX(InputRouterImpl, message, message_is_ok) 251 IPC_BEGIN_MESSAGE_MAP_EX(InputRouterImpl, message, message_is_ok)
248 IPC_MESSAGE_HANDLER(InputHostMsg_HandleInputEvent_ACK, OnInputEventAck) 252 IPC_MESSAGE_HANDLER(InputHostMsg_HandleInputEvent_ACK, OnInputEventAck)
249 IPC_MESSAGE_HANDLER(ViewHostMsg_MoveCaret_ACK, OnMsgMoveCaretAck) 253 IPC_MESSAGE_HANDLER(ViewHostMsg_MoveCaret_ACK, OnMsgMoveCaretAck)
250 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnSelectRangeAck) 254 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnSelectRangeAck)
251 IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers, 255 IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers,
252 OnHasTouchEventHandlers) 256 OnHasTouchEventHandlers)
257 IPC_MESSAGE_HANDLER(InputHostMsg_SetTouchAction,
258 OnSetTouchAction)
253 IPC_MESSAGE_UNHANDLED(handled = false) 259 IPC_MESSAGE_UNHANDLED(handled = false)
254 IPC_END_MESSAGE_MAP() 260 IPC_END_MESSAGE_MAP()
255 261
256 if (!message_is_ok) 262 if (!message_is_ok)
257 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE); 263 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE);
258 264
259 return handled; 265 return handled;
260 } 266 }
261 267
262 void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event, 268 void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event,
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 468
463 void InputRouterImpl::OnHasTouchEventHandlers(bool has_handlers) { 469 void InputRouterImpl::OnHasTouchEventHandlers(bool has_handlers) {
464 if (has_touch_handler_ == has_handlers) 470 if (has_touch_handler_ == has_handlers)
465 return; 471 return;
466 has_touch_handler_ = has_handlers; 472 has_touch_handler_ = has_handlers;
467 if (!has_handlers) 473 if (!has_handlers)
468 touch_event_queue_->FlushQueue(); 474 touch_event_queue_->FlushQueue();
469 client_->OnHasTouchEventHandlers(has_handlers); 475 client_->OnHasTouchEventHandlers(has_handlers);
470 } 476 }
471 477
478 void InputRouterImpl::OnSetTouchAction(
479 content::TouchAction touch_action) {
480 // Synthetic touchstart events should get filtered out in RenderWidget.
481 DCHECK(touch_event_queue_->IsPendingAckTouchStart());
482
483 touch_action_filter_.OnSetTouchAction(touch_action);
484 }
485
472 void InputRouterImpl::ProcessInputEventAck( 486 void InputRouterImpl::ProcessInputEventAck(
473 WebInputEvent::Type event_type, 487 WebInputEvent::Type event_type,
474 InputEventAckState ack_result, 488 InputEventAckState ack_result,
475 const ui::LatencyInfo& latency_info, 489 const ui::LatencyInfo& latency_info,
476 AckSource ack_source) { 490 AckSource ack_source) {
477 TRACE_EVENT2("input", "InputRouterImpl::ProcessInputEventAck", 491 TRACE_EVENT2("input", "InputRouterImpl::ProcessInputEventAck",
478 "type", WebInputEventTraits::GetName(event_type), 492 "type", WebInputEventTraits::GetName(event_type),
479 "ack", GetEventAckName(ack_result)); 493 "ack", GetEventAckName(ack_result));
480 494
481 // Note: The keyboard ack must be treated carefully, as it may result in 495 // Note: The keyboard ack must be treated carefully, as it may result in
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 break; 694 break;
681 } 695 }
682 } 696 }
683 697
684 bool InputRouterImpl::IsInOverscrollGesture() const { 698 bool InputRouterImpl::IsInOverscrollGesture() const {
685 OverscrollController* controller = client_->GetOverscrollController(); 699 OverscrollController* controller = client_->GetOverscrollController();
686 return controller && controller->overscroll_mode() != OVERSCROLL_NONE; 700 return controller && controller->overscroll_mode() != OVERSCROLL_NONE;
687 } 701 }
688 702
689 } // namespace content 703 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/input_router_impl.h ('k') | content/browser/renderer_host/input/touch_action_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698