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

Side by Side Diff: content/browser/renderer_host/render_widget_host_input_event_router.cc

Issue 2569273002: Add constructors to WebInputEvents and setters so we can work at cleaning up these public structs. (Closed)
Patch Set: Rebase Created 3 years, 11 months 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
OLDNEW
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/browser/renderer_host/render_widget_host_input_event_router.h" 5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 10
(...skipping 11 matching lines...) Expand all
22 namespace { 22 namespace {
23 23
24 void TransformEventTouchPositions(blink::WebTouchEvent* event, 24 void TransformEventTouchPositions(blink::WebTouchEvent* event,
25 const gfx::Vector2d& delta) { 25 const gfx::Vector2d& delta) {
26 for (unsigned i = 0; i < event->touchesLength; ++i) { 26 for (unsigned i = 0; i < event->touchesLength; ++i) {
27 event->touches[i].position.x += delta.x(); 27 event->touches[i].position.x += delta.x();
28 event->touches[i].position.y += delta.y(); 28 event->touches[i].position.y += delta.y();
29 } 29 }
30 } 30 }
31 31
32 blink::WebGestureEvent DummyGestureScrollUpdate() { 32 blink::WebGestureEvent DummyGestureScrollUpdate(double timeStampSeconds) {
33 blink::WebGestureEvent dummy_gesture_scroll_update; 33 return blink::WebGestureEvent(blink::WebInputEvent::GestureScrollUpdate,
34 dummy_gesture_scroll_update.type = blink::WebInputEvent::GestureScrollUpdate; 34 blink::WebInputEvent::NoModifiers,
35 return dummy_gesture_scroll_update; 35 timeStampSeconds);
36 } 36 }
37 37
38 } // anonymous namespace 38 } // anonymous namespace
39 39
40 namespace content { 40 namespace content {
41 41
42 void RenderWidgetHostInputEventRouter::OnRenderWidgetHostViewBaseDestroyed( 42 void RenderWidgetHostInputEventRouter::OnRenderWidgetHostViewBaseDestroyed(
43 RenderWidgetHostViewBase* view) { 43 RenderWidgetHostViewBase* view) {
44 view->RemoveObserver(this); 44 view->RemoveObserver(this);
45 45
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 // of the touch sequence, though this could be wrong; a better approach 330 // of the touch sequence, though this could be wrong; a better approach
331 // might be to always transform each point to the |touch_target_.target| 331 // might be to always transform each point to the |touch_target_.target|
332 // for the duration of the sequence. 332 // for the duration of the sequence.
333 touch_target_.delta = transformed_point - original_point; 333 touch_target_.delta = transformed_point - original_point;
334 touchscreen_gesture_target_queue_.push_back(touch_target_); 334 touchscreen_gesture_target_queue_.push_back(touch_target_);
335 335
336 if (!touch_target_.target) 336 if (!touch_target_.target)
337 return; 337 return;
338 338
339 if (touch_target_.target == bubbling_gesture_scroll_target_.target) { 339 if (touch_target_.target == bubbling_gesture_scroll_target_.target) {
340 SendGestureScrollEnd(bubbling_gesture_scroll_target_.target, 340 SendGestureScrollEnd(
341 DummyGestureScrollUpdate()); 341 bubbling_gesture_scroll_target_.target,
342 DummyGestureScrollUpdate(event->timeStampSeconds));
342 CancelScrollBubbling(bubbling_gesture_scroll_target_.target); 343 CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
343 } 344 }
344 } 345 }
345 346
346 if (touch_target_.target) { 347 if (touch_target_.target) {
347 TransformEventTouchPositions(event, touch_target_.delta); 348 TransformEventTouchPositions(event, touch_target_.delta);
348 touch_target_.target->ProcessTouchEvent(*event, latency); 349 touch_target_.target->ProcessTouchEvent(*event, latency);
349 } 350 }
350 break; 351 break;
351 } 352 }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 entered_views.back() == exited_views.back()) { 446 entered_views.back() == exited_views.back()) {
446 common_ancestor = entered_views.back(); 447 common_ancestor = entered_views.back();
447 entered_views.pop_back(); 448 entered_views.pop_back();
448 exited_views.pop_back(); 449 exited_views.pop_back();
449 } 450 }
450 451
451 gfx::Point transformed_point; 452 gfx::Point transformed_point;
452 // Send MouseLeaves. 453 // Send MouseLeaves.
453 for (auto view : exited_views) { 454 for (auto view : exited_views) {
454 blink::WebMouseEvent mouse_leave(*event); 455 blink::WebMouseEvent mouse_leave(*event);
455 mouse_leave.type = blink::WebInputEvent::MouseLeave; 456 mouse_leave.setType(blink::WebInputEvent::MouseLeave);
456 // There is a chance of a race if the last target has recently created a 457 // There is a chance of a race if the last target has recently created a
457 // new compositor surface. The SurfaceID for that might not have 458 // new compositor surface. The SurfaceID for that might not have
458 // propagated to its embedding surface, which makes it impossible to 459 // propagated to its embedding surface, which makes it impossible to
459 // compute the transformation for it 460 // compute the transformation for it
460 if (!root_view->TransformPointToCoordSpaceForView( 461 if (!root_view->TransformPointToCoordSpaceForView(
461 gfx::Point(event->x, event->y), view, &transformed_point)) 462 gfx::Point(event->x, event->y), view, &transformed_point))
462 transformed_point = gfx::Point(); 463 transformed_point = gfx::Point();
463 mouse_leave.x = transformed_point.x(); 464 mouse_leave.x = transformed_point.x();
464 mouse_leave.y = transformed_point.y(); 465 mouse_leave.y = transformed_point.y();
465 view->ProcessMouseEvent(mouse_leave, ui::LatencyInfo()); 466 view->ProcessMouseEvent(mouse_leave, ui::LatencyInfo());
466 } 467 }
467 468
468 // The ancestor might need to trigger MouseOut handlers. 469 // The ancestor might need to trigger MouseOut handlers.
469 if (common_ancestor && common_ancestor != target) { 470 if (common_ancestor && common_ancestor != target) {
470 blink::WebMouseEvent mouse_move(*event); 471 blink::WebMouseEvent mouse_move(*event);
471 mouse_move.type = blink::WebInputEvent::MouseMove; 472 mouse_move.setType(blink::WebInputEvent::MouseMove);
472 if (!root_view->TransformPointToCoordSpaceForView( 473 if (!root_view->TransformPointToCoordSpaceForView(
473 gfx::Point(event->x, event->y), common_ancestor, 474 gfx::Point(event->x, event->y), common_ancestor,
474 &transformed_point)) 475 &transformed_point))
475 transformed_point = gfx::Point(); 476 transformed_point = gfx::Point();
476 mouse_move.x = transformed_point.x(); 477 mouse_move.x = transformed_point.x();
477 mouse_move.y = transformed_point.y(); 478 mouse_move.y = transformed_point.y();
478 common_ancestor->ProcessMouseEvent(mouse_move, ui::LatencyInfo()); 479 common_ancestor->ProcessMouseEvent(mouse_move, ui::LatencyInfo());
479 } 480 }
480 481
481 // Send MouseMoves to trigger MouseEnter handlers. 482 // Send MouseMoves to trigger MouseEnter handlers.
482 for (auto view : entered_views) { 483 for (auto view : entered_views) {
483 if (view == target) 484 if (view == target)
484 continue; 485 continue;
485 blink::WebMouseEvent mouse_enter(*event); 486 blink::WebMouseEvent mouse_enter(*event);
486 mouse_enter.type = blink::WebInputEvent::MouseMove; 487 mouse_enter.setType(blink::WebInputEvent::MouseMove);
487 if (!root_view->TransformPointToCoordSpaceForView( 488 if (!root_view->TransformPointToCoordSpaceForView(
488 gfx::Point(event->x, event->y), view, &transformed_point)) 489 gfx::Point(event->x, event->y), view, &transformed_point))
489 transformed_point = gfx::Point(); 490 transformed_point = gfx::Point();
490 mouse_enter.x = transformed_point.x(); 491 mouse_enter.x = transformed_point.x();
491 mouse_enter.y = transformed_point.y(); 492 mouse_enter.y = transformed_point.y();
492 view->ProcessMouseEvent(mouse_enter, ui::LatencyInfo()); 493 view->ProcessMouseEvent(mouse_enter, ui::LatencyInfo());
493 } 494 }
494 495
495 last_mouse_move_target_ = target; 496 last_mouse_move_target_ = target;
496 last_mouse_move_root_view_ = root_view; 497 last_mouse_move_root_view_ = root_view;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 SendGestureScrollBegin(target_view, event); 566 SendGestureScrollBegin(target_view, event);
566 target_view->ProcessGestureEvent(event, latency_info); 567 target_view->ProcessGestureEvent(event, latency_info);
567 } 568 }
568 569
569 void RenderWidgetHostInputEventRouter::SendGestureScrollBegin( 570 void RenderWidgetHostInputEventRouter::SendGestureScrollBegin(
570 RenderWidgetHostViewBase* view, 571 RenderWidgetHostViewBase* view,
571 const blink::WebGestureEvent& event) { 572 const blink::WebGestureEvent& event) {
572 DCHECK(event.type == blink::WebInputEvent::GestureScrollUpdate || 573 DCHECK(event.type == blink::WebInputEvent::GestureScrollUpdate ||
573 event.type == blink::WebInputEvent::GesturePinchBegin); 574 event.type == blink::WebInputEvent::GesturePinchBegin);
574 blink::WebGestureEvent scroll_begin(event); 575 blink::WebGestureEvent scroll_begin(event);
575 scroll_begin.type = blink::WebInputEvent::GestureScrollBegin; 576 scroll_begin.setType(blink::WebInputEvent::GestureScrollBegin);
576 scroll_begin.data.scrollBegin.deltaXHint = event.data.scrollUpdate.deltaX; 577 scroll_begin.data.scrollBegin.deltaXHint = event.data.scrollUpdate.deltaX;
577 scroll_begin.data.scrollBegin.deltaYHint = event.data.scrollUpdate.deltaY; 578 scroll_begin.data.scrollBegin.deltaYHint = event.data.scrollUpdate.deltaY;
578 scroll_begin.data.scrollBegin.deltaHintUnits = 579 scroll_begin.data.scrollBegin.deltaHintUnits =
579 event.data.scrollUpdate.deltaUnits; 580 event.data.scrollUpdate.deltaUnits;
580 view->ProcessGestureEvent( 581 view->ProcessGestureEvent(
581 scroll_begin, 582 scroll_begin,
582 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent(event)); 583 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent(event));
583 } 584 }
584 585
585 void RenderWidgetHostInputEventRouter::SendGestureScrollEnd( 586 void RenderWidgetHostInputEventRouter::SendGestureScrollEnd(
586 RenderWidgetHostViewBase* view, 587 RenderWidgetHostViewBase* view,
587 const blink::WebGestureEvent& event) { 588 const blink::WebGestureEvent& event) {
588 DCHECK(event.type == blink::WebInputEvent::GestureScrollUpdate || 589 DCHECK(event.type == blink::WebInputEvent::GestureScrollUpdate ||
589 event.type == blink::WebInputEvent::GesturePinchEnd); 590 event.type == blink::WebInputEvent::GesturePinchEnd);
590 blink::WebGestureEvent scroll_end(event); 591 blink::WebGestureEvent scroll_end(event);
591 scroll_end.type = blink::WebInputEvent::GestureScrollEnd; 592 scroll_end.setType(blink::WebInputEvent::GestureScrollEnd);
592 scroll_end.timeStampSeconds = 593 scroll_end.setTimeStampSeconds(
593 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); 594 (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF());
594 scroll_end.data.scrollEnd.inertialPhase = 595 scroll_end.data.scrollEnd.inertialPhase =
595 event.data.scrollUpdate.inertialPhase; 596 event.data.scrollUpdate.inertialPhase;
596 scroll_end.data.scrollEnd.deltaUnits = event.data.scrollUpdate.deltaUnits; 597 scroll_end.data.scrollEnd.deltaUnits = event.data.scrollUpdate.deltaUnits;
597 view->ProcessGestureEvent( 598 view->ProcessGestureEvent(
598 scroll_end, 599 scroll_end,
599 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent(event)); 600 ui::WebInputEventTraits::CreateLatencyInfoForWebGestureEvent(event));
600 } 601 }
601 602
602 void RenderWidgetHostInputEventRouter::CancelScrollBubbling( 603 void RenderWidgetHostInputEventRouter::CancelScrollBubbling(
603 RenderWidgetHostViewBase* target_view) { 604 RenderWidgetHostViewBase* target_view) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 } 721 }
721 722
722 touchscreen_gesture_target_ = touchscreen_gesture_target_queue_.front(); 723 touchscreen_gesture_target_ = touchscreen_gesture_target_queue_.front();
723 touchscreen_gesture_target_queue_.pop_front(); 724 touchscreen_gesture_target_queue_.pop_front();
724 725
725 // Abort any scroll bubbling in progress to avoid double entry. 726 // Abort any scroll bubbling in progress to avoid double entry.
726 if (touchscreen_gesture_target_.target && 727 if (touchscreen_gesture_target_.target &&
727 touchscreen_gesture_target_.target == 728 touchscreen_gesture_target_.target ==
728 bubbling_gesture_scroll_target_.target) { 729 bubbling_gesture_scroll_target_.target) {
729 SendGestureScrollEnd(bubbling_gesture_scroll_target_.target, 730 SendGestureScrollEnd(bubbling_gesture_scroll_target_.target,
730 DummyGestureScrollUpdate()); 731 DummyGestureScrollUpdate(event->timeStampSeconds));
731 CancelScrollBubbling(bubbling_gesture_scroll_target_.target); 732 CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
732 } 733 }
733 } 734 }
734 735
735 if (!touchscreen_gesture_target_.target) 736 if (!touchscreen_gesture_target_.target)
736 return; 737 return;
737 738
738 // TODO(mohsen): Add tests to check event location. 739 // TODO(mohsen): Add tests to check event location.
739 event->x += touchscreen_gesture_target_.delta.x(); 740 event->x += touchscreen_gesture_target_.delta.x();
740 event->y += touchscreen_gesture_target_.delta.y(); 741 event->y += touchscreen_gesture_target_.delta.y();
(...skipping 17 matching lines...) Expand all
758 // touchpad gesture sequence, though this could be wrong; a better approach 759 // touchpad gesture sequence, though this could be wrong; a better approach
759 // might be to always transform each point to the 760 // might be to always transform each point to the
760 // |touchpad_gesture_target_.target| for the duration of the sequence. 761 // |touchpad_gesture_target_.target| for the duration of the sequence.
761 touchpad_gesture_target_.delta = transformed_point - original_point; 762 touchpad_gesture_target_.delta = transformed_point - original_point;
762 763
763 // Abort any scroll bubbling in progress to avoid double entry. 764 // Abort any scroll bubbling in progress to avoid double entry.
764 if (touchpad_gesture_target_.target && 765 if (touchpad_gesture_target_.target &&
765 touchpad_gesture_target_.target == 766 touchpad_gesture_target_.target ==
766 bubbling_gesture_scroll_target_.target) { 767 bubbling_gesture_scroll_target_.target) {
767 SendGestureScrollEnd(bubbling_gesture_scroll_target_.target, 768 SendGestureScrollEnd(bubbling_gesture_scroll_target_.target,
768 DummyGestureScrollUpdate()); 769 DummyGestureScrollUpdate(event->timeStampSeconds));
769 CancelScrollBubbling(bubbling_gesture_scroll_target_.target); 770 CancelScrollBubbling(bubbling_gesture_scroll_target_.target);
770 } 771 }
771 } 772 }
772 773
773 if (!touchpad_gesture_target_.target) 774 if (!touchpad_gesture_target_.target)
774 return; 775 return;
775 776
776 // TODO(mohsen): Add tests to check event location. 777 // TODO(mohsen): Add tests to check event location.
777 event->x += touchpad_gesture_target_.delta.x(); 778 event->x += touchpad_gesture_target_.delta.x();
778 event->y += touchpad_gesture_target_.delta.y(); 779 event->y += touchpad_gesture_target_.delta.y();
779 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency); 780 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency);
780 } 781 }
781 782
782 } // namespace content 783 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698