| OLD | NEW |
| 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" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "content/public/browser/notification_types.h" | 23 #include "content/public/browser/notification_types.h" |
| 24 #include "content/public/browser/user_metrics.h" | 24 #include "content/public/browser/user_metrics.h" |
| 25 #include "content/public/common/content_switches.h" | 25 #include "content/public/common/content_switches.h" |
| 26 #include "ipc/ipc_sender.h" | 26 #include "ipc/ipc_sender.h" |
| 27 #include "ui/events/event.h" | 27 #include "ui/events/event.h" |
| 28 #include "ui/events/keycodes/keyboard_codes.h" | 28 #include "ui/events/keycodes/keyboard_codes.h" |
| 29 | 29 |
| 30 using base::Time; | 30 using base::Time; |
| 31 using base::TimeDelta; | 31 using base::TimeDelta; |
| 32 using base::TimeTicks; | 32 using base::TimeTicks; |
| 33 using WebKit::WebGestureEvent; | 33 using blink::WebGestureEvent; |
| 34 using WebKit::WebInputEvent; | 34 using blink::WebInputEvent; |
| 35 using WebKit::WebKeyboardEvent; | 35 using blink::WebKeyboardEvent; |
| 36 using WebKit::WebMouseEvent; | 36 using blink::WebMouseEvent; |
| 37 using WebKit::WebMouseWheelEvent; | 37 using blink::WebMouseWheelEvent; |
| 38 | 38 |
| 39 namespace content { | 39 namespace content { |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 GestureEventWithLatencyInfo MakeGestureEvent(WebInputEvent::Type type, | 42 GestureEventWithLatencyInfo MakeGestureEvent(WebInputEvent::Type type, |
| 43 double timestamp_seconds, | 43 double timestamp_seconds, |
| 44 int x, | 44 int x, |
| 45 int y, | 45 int y, |
| 46 int modifiers, | 46 int modifiers, |
| 47 const ui::LatencyInfo latency) { | 47 const ui::LatencyInfo latency) { |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 if (!controller) | 348 if (!controller) |
| 349 return false; | 349 return false; |
| 350 | 350 |
| 351 OverscrollController::Disposition disposition = | 351 OverscrollController::Disposition disposition = |
| 352 controller->DispatchEvent(input_event, latency_info); | 352 controller->DispatchEvent(input_event, latency_info); |
| 353 | 353 |
| 354 bool consumed = disposition == OverscrollController::CONSUMED; | 354 bool consumed = disposition == OverscrollController::CONSUMED; |
| 355 | 355 |
| 356 if (disposition == OverscrollController::SHOULD_FORWARD_TO_GESTURE_FILTER) { | 356 if (disposition == OverscrollController::SHOULD_FORWARD_TO_GESTURE_FILTER) { |
| 357 DCHECK(WebInputEvent::isGestureEventType(input_event.type)); | 357 DCHECK(WebInputEvent::isGestureEventType(input_event.type)); |
| 358 const WebKit::WebGestureEvent& gesture_event = | 358 const blink::WebGestureEvent& gesture_event = |
| 359 static_cast<const WebKit::WebGestureEvent&>(input_event); | 359 static_cast<const blink::WebGestureEvent&>(input_event); |
| 360 // An ACK is expected for the event, so mark it as consumed. | 360 // An ACK is expected for the event, so mark it as consumed. |
| 361 consumed = !gesture_event_filter_->ShouldForward( | 361 consumed = !gesture_event_filter_->ShouldForward( |
| 362 GestureEventWithLatencyInfo(gesture_event, latency_info)); | 362 GestureEventWithLatencyInfo(gesture_event, latency_info)); |
| 363 } | 363 } |
| 364 | 364 |
| 365 if (consumed) { | 365 if (consumed) { |
| 366 InputEventAckState overscroll_ack = | 366 InputEventAckState overscroll_ack = |
| 367 WebInputEvent::isTouchEventType(input_event.type) ? | 367 WebInputEvent::isTouchEventType(input_event.type) ? |
| 368 INPUT_EVENT_ACK_STATE_NOT_CONSUMED : INPUT_EVENT_ACK_STATE_CONSUMED; | 368 INPUT_EVENT_ACK_STATE_NOT_CONSUMED : INPUT_EVENT_ACK_STATE_CONSUMED; |
| 369 ProcessInputEventAck(input_event.type, | 369 ProcessInputEventAck(input_event.type, |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 } else if (WebInputEvent::isTouchEventType(event_type)) { | 490 } else if (WebInputEvent::isTouchEventType(event_type)) { |
| 491 ProcessTouchAck(ack_result, latency_info); | 491 ProcessTouchAck(ack_result, latency_info); |
| 492 } else if (WebInputEvent::isGestureEventType(event_type)) { | 492 } else if (WebInputEvent::isGestureEventType(event_type)) { |
| 493 ProcessGestureAck(event_type, ack_result, latency_info); | 493 ProcessGestureAck(event_type, ack_result, latency_info); |
| 494 } else if (event_type != WebInputEvent::Undefined) { | 494 } else if (event_type != WebInputEvent::Undefined) { |
| 495 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE); | 495 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE); |
| 496 } | 496 } |
| 497 } | 497 } |
| 498 | 498 |
| 499 void ImmediateInputRouter::ProcessKeyboardAck( | 499 void ImmediateInputRouter::ProcessKeyboardAck( |
| 500 WebKit::WebInputEvent::Type type, | 500 blink::WebInputEvent::Type type, |
| 501 InputEventAckState ack_result) { | 501 InputEventAckState ack_result) { |
| 502 if (key_queue_.empty()) { | 502 if (key_queue_.empty()) { |
| 503 ack_handler_->OnUnexpectedEventAck(InputAckHandler::UNEXPECTED_ACK); | 503 ack_handler_->OnUnexpectedEventAck(InputAckHandler::UNEXPECTED_ACK); |
| 504 } else if (key_queue_.front().type != type) { | 504 } else if (key_queue_.front().type != type) { |
| 505 // Something must be wrong. Clear the |key_queue_| and char event | 505 // Something must be wrong. Clear the |key_queue_| and char event |
| 506 // suppression so that we can resume from the error. | 506 // suppression so that we can resume from the error. |
| 507 key_queue_.clear(); | 507 key_queue_.clear(); |
| 508 ack_handler_->OnUnexpectedEventAck(InputAckHandler::UNEXPECTED_EVENT_TYPE); | 508 ack_handler_->OnUnexpectedEventAck(InputAckHandler::UNEXPECTED_EVENT_TYPE); |
| 509 } else { | 509 } else { |
| 510 NativeWebKeyboardEvent front_item = key_queue_.front(); | 510 NativeWebKeyboardEvent front_item = key_queue_.front(); |
| 511 key_queue_.pop_front(); | 511 key_queue_.pop_front(); |
| 512 | 512 |
| 513 ack_handler_->OnKeyboardEventAck(front_item, ack_result); | 513 ack_handler_->OnKeyboardEventAck(front_item, ack_result); |
| 514 // WARNING: This ImmediateInputRouter can be deallocated at this point | 514 // WARNING: This ImmediateInputRouter can be deallocated at this point |
| 515 // (i.e. in the case of Ctrl+W, where the call to | 515 // (i.e. in the case of Ctrl+W, where the call to |
| 516 // HandleKeyboardEvent destroys this ImmediateInputRouter). | 516 // HandleKeyboardEvent destroys this ImmediateInputRouter). |
| 517 // TODO(jdduke): crbug.com/274029 - Make ack-triggered shutdown async. | 517 // TODO(jdduke): crbug.com/274029 - Make ack-triggered shutdown async. |
| 518 } | 518 } |
| 519 } | 519 } |
| 520 | 520 |
| 521 void ImmediateInputRouter::ProcessMouseAck(WebKit::WebInputEvent::Type type, | 521 void ImmediateInputRouter::ProcessMouseAck(blink::WebInputEvent::Type type, |
| 522 InputEventAckState ack_result) { | 522 InputEventAckState ack_result) { |
| 523 if (type != WebInputEvent::MouseMove) | 523 if (type != WebInputEvent::MouseMove) |
| 524 return; | 524 return; |
| 525 | 525 |
| 526 mouse_move_pending_ = false; | 526 mouse_move_pending_ = false; |
| 527 | 527 |
| 528 if (next_mouse_move_) { | 528 if (next_mouse_move_) { |
| 529 DCHECK(next_mouse_move_->event.type == WebInputEvent::MouseMove); | 529 DCHECK(next_mouse_move_->event.type == WebInputEvent::MouseMove); |
| 530 scoped_ptr<MouseEventWithLatencyInfo> next_mouse_move | 530 scoped_ptr<MouseEventWithLatencyInfo> next_mouse_move |
| 531 = next_mouse_move_.Pass(); | 531 = next_mouse_move_.Pass(); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 break; | 675 break; |
| 676 } | 676 } |
| 677 } | 677 } |
| 678 | 678 |
| 679 bool ImmediateInputRouter::IsInOverscrollGesture() const { | 679 bool ImmediateInputRouter::IsInOverscrollGesture() const { |
| 680 OverscrollController* controller = client_->GetOverscrollController(); | 680 OverscrollController* controller = client_->GetOverscrollController(); |
| 681 return controller && controller->overscroll_mode() != OVERSCROLL_NONE; | 681 return controller && controller->overscroll_mode() != OVERSCROLL_NONE; |
| 682 } | 682 } |
| 683 | 683 |
| 684 } // namespace content | 684 } // namespace content |
| OLD | NEW |