OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/renderer/input/render_widget_input_handler.h" | 5 #include "content/renderer/input/render_widget_input_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 handling_event_type_(WebInputEvent::kUndefined), | 200 handling_event_type_(WebInputEvent::kUndefined), |
201 context_menu_source_type_(ui::MENU_SOURCE_MOUSE), | 201 context_menu_source_type_(ui::MENU_SOURCE_MOUSE), |
202 suppress_next_char_events_(false) { | 202 suppress_next_char_events_(false) { |
203 DCHECK(delegate); | 203 DCHECK(delegate); |
204 DCHECK(widget); | 204 DCHECK(widget); |
205 delegate->SetInputHandler(this); | 205 delegate->SetInputHandler(this); |
206 } | 206 } |
207 | 207 |
208 RenderWidgetInputHandler::~RenderWidgetInputHandler() {} | 208 RenderWidgetInputHandler::~RenderWidgetInputHandler() {} |
209 | 209 |
210 void RenderWidgetInputHandler::HandleInputEvent( | 210 InputEventAckState RenderWidgetInputHandler::HandleInputEvent( |
211 const blink::WebCoalescedInputEvent& coalesced_event, | 211 const blink::WebCoalescedInputEvent& coalesced_event, |
212 const ui::LatencyInfo& latency_info, | 212 const ui::LatencyInfo& latency_info, |
213 InputEventDispatchType dispatch_type) { | 213 InputEventDispatchType dispatch_type) { |
214 const WebInputEvent& input_event = coalesced_event.Event(); | 214 const WebInputEvent& input_event = coalesced_event.Event(); |
215 base::AutoReset<bool> handling_input_event_resetter(&handling_input_event_, | 215 base::AutoReset<bool> handling_input_event_resetter(&handling_input_event_, |
216 true); | 216 true); |
217 base::AutoReset<WebInputEvent::Type> handling_event_type_resetter( | 217 base::AutoReset<WebInputEvent::Type> handling_event_type_resetter( |
218 &handling_event_type_, input_event.GetType()); | 218 &handling_event_type_, input_event.GetType()); |
219 | 219 |
220 // Calls into |didOverscroll()| while handling this event will populate | 220 // Calls into |didOverscroll()| while handling this event will populate |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 delegate_->ObserveGestureEventAndResult( | 386 delegate_->ObserveGestureEventAndResult( |
387 gesture_event, | 387 gesture_event, |
388 event_overscroll ? event_overscroll->latest_overscroll_delta | 388 event_overscroll ? event_overscroll->latest_overscroll_delta |
389 : gfx::Vector2dF(), | 389 : gfx::Vector2dF(), |
390 processed != WebInputEventResult::kNotHandled); | 390 processed != WebInputEventResult::kNotHandled); |
391 } | 391 } |
392 } | 392 } |
393 | 393 |
394 TRACE_EVENT_SYNTHETIC_DELAY_END("blink.HandleInputEvent"); | 394 TRACE_EVENT_SYNTHETIC_DELAY_END("blink.HandleInputEvent"); |
395 | 395 |
396 if (dispatch_type == DISPATCH_TYPE_BLOCKING_NOTIFY_MAIN || | 396 if (dispatch_type == DISPATCH_TYPE_BLOCKING) { |
397 dispatch_type == DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN) { | |
398 // |non_blocking| means it was ack'd already by the InputHandlerProxy | |
399 // so let the delegate know the event has been handled. | |
400 delegate_->NotifyInputEventHandled(input_event.GetType(), processed, | |
401 ack_result); | |
402 } | |
403 | |
404 if ((dispatch_type == DISPATCH_TYPE_BLOCKING || | |
405 dispatch_type == DISPATCH_TYPE_BLOCKING_NOTIFY_MAIN)) { | |
406 std::unique_ptr<InputEventAck> response(new InputEventAck( | 397 std::unique_ptr<InputEventAck> response(new InputEventAck( |
407 InputEventAckSource::MAIN_THREAD, input_event.GetType(), ack_result, | 398 InputEventAckSource::MAIN_THREAD, input_event.GetType(), ack_result, |
408 swap_latency_info, std::move(event_overscroll), | 399 swap_latency_info, std::move(event_overscroll), |
409 ui::WebInputEventTraits::GetUniqueTouchEventId(input_event))); | 400 ui::WebInputEventTraits::GetUniqueTouchEventId(input_event))); |
410 delegate_->OnInputEventAck(std::move(response)); | 401 delegate_->OnInputEventAck(std::move(response)); |
411 } else { | 402 } else { |
412 DCHECK(!event_overscroll) << "Unexpected overscroll for un-acked event"; | 403 DCHECK(!event_overscroll) << "Unexpected overscroll for un-acked event"; |
413 } | 404 } |
414 if (RenderThreadImpl::current()) { | 405 if (RenderThreadImpl::current()) { |
415 RenderThreadImpl::current() | 406 RenderThreadImpl::current() |
(...skipping 25 matching lines...) Expand all Loading... |
441 // TODO(rouslan): Fix ChromeOS and Windows 8 behavior of autofill popup with | 432 // TODO(rouslan): Fix ChromeOS and Windows 8 behavior of autofill popup with |
442 // virtual keyboard. | 433 // virtual keyboard. |
443 #if !defined(OS_ANDROID) | 434 #if !defined(OS_ANDROID) |
444 // Virtual keyboard is not supported, so react to focus change immediately. | 435 // Virtual keyboard is not supported, so react to focus change immediately. |
445 if (processed != WebInputEventResult::kNotHandled && | 436 if (processed != WebInputEventResult::kNotHandled && |
446 (input_event.GetType() == WebInputEvent::kTouchEnd || | 437 (input_event.GetType() == WebInputEvent::kTouchEnd || |
447 input_event.GetType() == WebInputEvent::kMouseUp)) { | 438 input_event.GetType() == WebInputEvent::kMouseUp)) { |
448 delegate_->FocusChangeComplete(); | 439 delegate_->FocusChangeComplete(); |
449 } | 440 } |
450 #endif | 441 #endif |
| 442 return ack_result; |
451 } | 443 } |
452 | 444 |
453 void RenderWidgetInputHandler::DidOverscrollFromBlink( | 445 void RenderWidgetInputHandler::DidOverscrollFromBlink( |
454 const WebFloatSize& overscrollDelta, | 446 const WebFloatSize& overscrollDelta, |
455 const WebFloatSize& accumulatedOverscroll, | 447 const WebFloatSize& accumulatedOverscroll, |
456 const WebFloatPoint& position, | 448 const WebFloatPoint& position, |
457 const WebFloatSize& velocity) { | 449 const WebFloatSize& velocity) { |
458 std::unique_ptr<DidOverscrollParams> params(new DidOverscrollParams()); | 450 std::unique_ptr<DidOverscrollParams> params(new DidOverscrollParams()); |
459 params->accumulated_overscroll = gfx::Vector2dF( | 451 params->accumulated_overscroll = gfx::Vector2dF( |
460 accumulatedOverscroll.width, accumulatedOverscroll.height); | 452 accumulatedOverscroll.width, accumulatedOverscroll.height); |
461 params->latest_overscroll_delta = | 453 params->latest_overscroll_delta = |
462 gfx::Vector2dF(overscrollDelta.width, overscrollDelta.height); | 454 gfx::Vector2dF(overscrollDelta.width, overscrollDelta.height); |
463 params->current_fling_velocity = | 455 params->current_fling_velocity = |
464 gfx::Vector2dF(velocity.width, velocity.height); | 456 gfx::Vector2dF(velocity.width, velocity.height); |
465 params->causal_event_viewport_point = gfx::PointF(position.x, position.y); | 457 params->causal_event_viewport_point = gfx::PointF(position.x, position.y); |
466 | 458 |
467 // If we're currently handling an event, stash the overscroll data such that | 459 // If we're currently handling an event, stash the overscroll data such that |
468 // it can be bundled in the event ack. | 460 // it can be bundled in the event ack. |
469 if (handling_event_overscroll_) { | 461 if (handling_event_overscroll_) { |
470 *handling_event_overscroll_ = std::move(params); | 462 *handling_event_overscroll_ = std::move(params); |
471 return; | 463 return; |
472 } | 464 } |
473 | 465 |
474 delegate_->OnDidOverscroll(*params); | 466 delegate_->OnDidOverscroll(*params); |
475 } | 467 } |
476 | 468 |
477 } // namespace content | 469 } // namespace content |
OLD | NEW |