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

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

Issue 67383002: Initial browser-side implementation for touch-action (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update for new blink API - no touch ID for now Created 7 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 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/immediate_input_router.h" 5 #include "content/browser/renderer_host/input/immediate_input_router.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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size()); 174 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size());
174 175
175 gesture_event_filter_->FlingHasBeenHalted(); 176 gesture_event_filter_->FlingHasBeenHalted();
176 177
177 // Only forward the non-native portions of our event. 178 // Only forward the non-native portions of our event.
178 FilterAndSendWebInputEvent(key_event, latency_info, is_keyboard_shortcut); 179 FilterAndSendWebInputEvent(key_event, latency_info, is_keyboard_shortcut);
179 } 180 }
180 181
181 void ImmediateInputRouter::SendGestureEvent( 182 void ImmediateInputRouter::SendGestureEvent(
182 const GestureEventWithLatencyInfo& gesture_event) { 183 const GestureEventWithLatencyInfo& gesture_event) {
184 if (touch_action_filter_.FilterGestureEvent(gesture_event.event))
185 return;
186
183 HandleGestureScroll(gesture_event); 187 HandleGestureScroll(gesture_event);
184 188
185 if (!IsInOverscrollGesture() && 189 if (!IsInOverscrollGesture() &&
186 !gesture_event_filter_->ShouldForward(gesture_event)) { 190 !gesture_event_filter_->ShouldForward(gesture_event)) {
187 OverscrollController* controller = client_->GetOverscrollController(); 191 OverscrollController* controller = client_->GetOverscrollController();
188 if (controller) 192 if (controller)
189 controller->DiscardingGestureEvent(gesture_event.event); 193 controller->DiscardingGestureEvent(gesture_event.event);
190 return; 194 return;
191 } 195 }
192 196
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 252
249 bool ImmediateInputRouter::OnMessageReceived(const IPC::Message& message) { 253 bool ImmediateInputRouter::OnMessageReceived(const IPC::Message& message) {
250 bool handled = true; 254 bool handled = true;
251 bool message_is_ok = true; 255 bool message_is_ok = true;
252 IPC_BEGIN_MESSAGE_MAP_EX(ImmediateInputRouter, message, message_is_ok) 256 IPC_BEGIN_MESSAGE_MAP_EX(ImmediateInputRouter, message, message_is_ok)
253 IPC_MESSAGE_HANDLER(InputHostMsg_HandleInputEvent_ACK, OnInputEventAck) 257 IPC_MESSAGE_HANDLER(InputHostMsg_HandleInputEvent_ACK, OnInputEventAck)
254 IPC_MESSAGE_HANDLER(ViewHostMsg_MoveCaret_ACK, OnMsgMoveCaretAck) 258 IPC_MESSAGE_HANDLER(ViewHostMsg_MoveCaret_ACK, OnMsgMoveCaretAck)
255 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnSelectRangeAck) 259 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnSelectRangeAck)
256 IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers, 260 IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers,
257 OnHasTouchEventHandlers) 261 OnHasTouchEventHandlers)
262 IPC_MESSAGE_HANDLER(InputHostMsg_SetTouchAction,
263 OnSetTouchAction)
258 IPC_MESSAGE_UNHANDLED(handled = false) 264 IPC_MESSAGE_UNHANDLED(handled = false)
259 IPC_END_MESSAGE_MAP() 265 IPC_END_MESSAGE_MAP()
260 266
261 if (!message_is_ok) 267 if (!message_is_ok)
262 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE); 268 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE);
263 269
264 return handled; 270 return handled;
265 } 271 }
266 272
267 void ImmediateInputRouter::OnTouchEventAck( 273 void ImmediateInputRouter::OnTouchEventAck(
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 473
468 void ImmediateInputRouter::OnHasTouchEventHandlers(bool has_handlers) { 474 void ImmediateInputRouter::OnHasTouchEventHandlers(bool has_handlers) {
469 if (has_touch_handler_ == has_handlers) 475 if (has_touch_handler_ == has_handlers)
470 return; 476 return;
471 has_touch_handler_ = has_handlers; 477 has_touch_handler_ = has_handlers;
472 if (!has_handlers) 478 if (!has_handlers)
473 touch_event_queue_->FlushQueue(); 479 touch_event_queue_->FlushQueue();
474 client_->OnHasTouchEventHandlers(has_handlers); 480 client_->OnHasTouchEventHandlers(has_handlers);
475 } 481 }
476 482
483 void ImmediateInputRouter::OnSetTouchAction(
484 content::TouchAction touch_action) {
485 // Synthetic touchsstart events should get filtered out in RenderWidget.
sadrul 2013/11/20 23:28:30 *touchstart
Rick Byers 2013/11/21 02:37:36 Done.
486 DCHECK(touch_event_queue_->IsPendingAckTouchStart());
487
488 touch_action_filter_.OnSetTouchAction(touch_action);
489 }
490
477 void ImmediateInputRouter::ProcessInputEventAck( 491 void ImmediateInputRouter::ProcessInputEventAck(
478 WebInputEvent::Type event_type, 492 WebInputEvent::Type event_type,
479 InputEventAckState ack_result, 493 InputEventAckState ack_result,
480 const ui::LatencyInfo& latency_info, 494 const ui::LatencyInfo& latency_info,
481 AckSource ack_source) { 495 AckSource ack_source) {
482 TRACE_EVENT2("input", "ImmediateInputRouter::ProcessInputEventAck", 496 TRACE_EVENT2("input", "ImmediateInputRouter::ProcessInputEventAck",
483 "type", WebInputEventTraits::GetName(event_type), 497 "type", WebInputEventTraits::GetName(event_type),
484 "ack", GetEventAckName(ack_result)); 498 "ack", GetEventAckName(ack_result));
485 499
486 // Note: The keyboard ack must be treated carefully, as it may result in 500 // Note: The keyboard ack must be treated carefully, as it may result in
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 break; 701 break;
688 } 702 }
689 } 703 }
690 704
691 bool ImmediateInputRouter::IsInOverscrollGesture() const { 705 bool ImmediateInputRouter::IsInOverscrollGesture() const {
692 OverscrollController* controller = client_->GetOverscrollController(); 706 OverscrollController* controller = client_->GetOverscrollController();
693 return controller && controller->overscroll_mode() != OVERSCROLL_NONE; 707 return controller && controller->overscroll_mode() != OVERSCROLL_NONE;
694 } 708 }
695 709
696 } // namespace content 710 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698