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/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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 } | 149 } |
150 | 150 |
151 // The hittest delegate is used to reject hittesting quads based on extra | 151 // The hittest delegate is used to reject hittesting quads based on extra |
152 // hittesting data send by the renderer. | 152 // hittesting data send by the renderer. |
153 HittestDelegate delegate(hittest_data_); | 153 HittestDelegate delegate(hittest_data_); |
154 | 154 |
155 // The conversion of point to transform_point is done over the course of the | 155 // The conversion of point to transform_point is done over the course of the |
156 // hit testing, and reflect transformations that would normally be applied in | 156 // hit testing, and reflect transformations that would normally be applied in |
157 // the renderer process if the event was being routed between frames within a | 157 // the renderer process if the event was being routed between frames within a |
158 // single process with only one RenderWidgetHost. | 158 // single process with only one RenderWidgetHost. |
159 uint32_t surface_client_id = | 159 cc::FrameSinkId frame_sink_id = |
160 root_view->SurfaceClientIdAtPoint(&delegate, point, transformed_point); | 160 root_view->FrameSinkIdAtPoint(&delegate, point, transformed_point); |
161 const SurfaceClientIdOwnerMap::iterator iter = | 161 const FrameSinkIdOwnerMap::iterator iter = owner_map_.find(frame_sink_id); |
162 owner_map_.find(surface_client_id); | |
163 // If the point hit a Surface whose namspace is no longer in the map, then | 162 // If the point hit a Surface whose namspace is no longer in the map, then |
164 // it likely means the RenderWidgetHostView has been destroyed but its | 163 // it likely means the RenderWidgetHostView has been destroyed but its |
165 // parent frame has not sent a new compositor frame since that happened. | 164 // parent frame has not sent a new compositor frame since that happened. |
166 if (iter == owner_map_.end()) | 165 if (iter == owner_map_.end()) |
167 return root_view; | 166 return root_view; |
168 | 167 |
169 return iter->second; | 168 return iter->second; |
170 } | 169 } |
171 | 170 |
172 void RenderWidgetHostInputEventRouter::RouteMouseEvent( | 171 void RenderWidgetHostInputEventRouter::RouteMouseEvent( |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 | 559 |
561 void RenderWidgetHostInputEventRouter::CancelScrollBubbling( | 560 void RenderWidgetHostInputEventRouter::CancelScrollBubbling( |
562 RenderWidgetHostViewBase* target_view) { | 561 RenderWidgetHostViewBase* target_view) { |
563 DCHECK(target_view); | 562 DCHECK(target_view); |
564 if (target_view == first_bubbling_scroll_target_.target) { | 563 if (target_view == first_bubbling_scroll_target_.target) { |
565 first_bubbling_scroll_target_.target = nullptr; | 564 first_bubbling_scroll_target_.target = nullptr; |
566 bubbling_gesture_scroll_target_.target = nullptr; | 565 bubbling_gesture_scroll_target_.target = nullptr; |
567 } | 566 } |
568 } | 567 } |
569 | 568 |
570 void RenderWidgetHostInputEventRouter::AddSurfaceClientIdOwner( | 569 void RenderWidgetHostInputEventRouter::AddFrameSinkIdOwner( |
571 uint32_t id, | 570 const cc::FrameSinkId& id, |
572 RenderWidgetHostViewBase* owner) { | 571 RenderWidgetHostViewBase* owner) { |
573 DCHECK(owner_map_.find(id) == owner_map_.end()); | 572 DCHECK(owner_map_.find(id) == owner_map_.end()); |
574 // We want to be notified if the owner is destroyed so we can remove it from | 573 // We want to be notified if the owner is destroyed so we can remove it from |
575 // our map. | 574 // our map. |
576 owner->AddObserver(this); | 575 owner->AddObserver(this); |
577 owner_map_.insert(std::make_pair(id, owner)); | 576 owner_map_.insert(std::make_pair(id, owner)); |
578 } | 577 } |
579 | 578 |
580 void RenderWidgetHostInputEventRouter::RemoveSurfaceClientIdOwner(uint32_t id) { | 579 void RenderWidgetHostInputEventRouter::RemoveFrameSinkIdOwner( |
| 580 const cc::FrameSinkId& id) { |
581 auto it_to_remove = owner_map_.find(id); | 581 auto it_to_remove = owner_map_.find(id); |
582 if (it_to_remove != owner_map_.end()) { | 582 if (it_to_remove != owner_map_.end()) { |
583 it_to_remove->second->RemoveObserver(this); | 583 it_to_remove->second->RemoveObserver(this); |
584 owner_map_.erase(it_to_remove); | 584 owner_map_.erase(it_to_remove); |
585 } | 585 } |
586 | 586 |
587 for (auto it = hittest_data_.begin(); it != hittest_data_.end();) { | 587 for (auto it = hittest_data_.begin(); it != hittest_data_.end();) { |
588 if (it->first.client_id() == id) | 588 if (it->first.frame_sink_id() == id) |
589 it = hittest_data_.erase(it); | 589 it = hittest_data_.erase(it); |
590 else | 590 else |
591 ++it; | 591 ++it; |
592 } | 592 } |
593 } | 593 } |
594 | 594 |
595 void RenderWidgetHostInputEventRouter::OnHittestData( | 595 void RenderWidgetHostInputEventRouter::OnHittestData( |
596 const FrameHostMsg_HittestData_Params& params) { | 596 const FrameHostMsg_HittestData_Params& params) { |
597 if (owner_map_.find(params.surface_id.client_id()) == owner_map_.end()) { | 597 if (owner_map_.find(params.surface_id.frame_sink_id()) == owner_map_.end()) { |
598 return; | 598 return; |
599 } | 599 } |
600 HittestData data; | 600 HittestData data; |
601 data.ignored_for_hittest = params.ignored_for_hittest; | 601 data.ignored_for_hittest = params.ignored_for_hittest; |
602 hittest_data_[params.surface_id] = data; | 602 hittest_data_[params.surface_id] = data; |
603 } | 603 } |
604 | 604 |
605 void RenderWidgetHostInputEventRouter::RouteTouchscreenGestureEvent( | 605 void RenderWidgetHostInputEventRouter::RouteTouchscreenGestureEvent( |
606 RenderWidgetHostViewBase* root_view, | 606 RenderWidgetHostViewBase* root_view, |
607 blink::WebGestureEvent* event, | 607 blink::WebGestureEvent* event, |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 if (!touchpad_gesture_target_.target) | 719 if (!touchpad_gesture_target_.target) |
720 return; | 720 return; |
721 | 721 |
722 // TODO(mohsen): Add tests to check event location. | 722 // TODO(mohsen): Add tests to check event location. |
723 event->x += touchpad_gesture_target_.delta.x(); | 723 event->x += touchpad_gesture_target_.delta.x(); |
724 event->y += touchpad_gesture_target_.delta.y(); | 724 event->y += touchpad_gesture_target_.delta.y(); |
725 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency); | 725 touchpad_gesture_target_.target->ProcessGestureEvent(*event, latency); |
726 } | 726 } |
727 | 727 |
728 } // namespace content | 728 } // namespace content |
OLD | NEW |