| Index: content/browser/renderer_host/input/input_router_impl.cc
|
| diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
|
| index 1028668e51100a582df1f4d54792935b6419897d..b6110d21648446332073c9b60b1a755c9b3a2a67 100644
|
| --- a/content/browser/renderer_host/input/input_router_impl.cc
|
| +++ b/content/browser/renderer_host/input/input_router_impl.cc
|
| @@ -146,6 +146,7 @@ InputRouterImpl::InputRouterImpl(IPC::Sender* sender,
|
| touch_ack_timeout_supported_(false),
|
| current_view_flags_(0),
|
| current_ack_source_(ACK_SOURCE_NONE),
|
| + flush_requested_(false),
|
| gesture_event_queue_(new GestureEventQueue(this, this)) {
|
| DCHECK(sender);
|
| DCHECK(client);
|
| @@ -159,7 +160,10 @@ InputRouterImpl::InputRouterImpl(IPC::Sender* sender,
|
|
|
| InputRouterImpl::~InputRouterImpl() {}
|
|
|
| -void InputRouterImpl::Flush() {}
|
| +void InputRouterImpl::Flush() {
|
| + flush_requested_ = true;
|
| + SignalFlushedIfNecessary();
|
| +}
|
|
|
| bool InputRouterImpl::SendInput(scoped_ptr<IPC::Message> message) {
|
| DCHECK(IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart);
|
| @@ -623,6 +627,8 @@ void InputRouterImpl::ProcessInputEventAck(
|
| } else if (event_type != WebInputEvent::Undefined) {
|
| ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE);
|
| }
|
| +
|
| + SignalFlushedIfNecessary();
|
| }
|
|
|
| void InputRouterImpl::ProcessKeyboardAck(blink::WebInputEvent::Type type,
|
| @@ -822,6 +828,27 @@ void InputRouterImpl::UpdateTouchAckTimeoutEnabled() {
|
| touch_ack_timeout_delay_);
|
| }
|
|
|
| +void InputRouterImpl::SignalFlushedIfNecessary() {
|
| + if (!flush_requested_)
|
| + return;
|
| +
|
| + if (HasPendingEvents())
|
| + return;
|
| +
|
| + flush_requested_ = false;
|
| + client_->DidFlush();
|
| +}
|
| +
|
| +bool InputRouterImpl::HasPendingEvents() const {
|
| + return !touch_event_queue_->empty() ||
|
| + gesture_event_queue_->HasQueuedGestureEvents() ||
|
| + !key_queue_.empty() ||
|
| + mouse_move_pending_ ||
|
| + mouse_wheel_pending_ ||
|
| + select_range_pending_ ||
|
| + move_caret_pending_;
|
| +}
|
| +
|
| bool InputRouterImpl::IsInOverscrollGesture() const {
|
| OverscrollController* controller = client_->GetOverscrollController();
|
| return controller && controller->overscroll_mode() != OVERSCROLL_NONE;
|
|
|