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

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

Issue 2369793002: WIP: Propagate SurfaceID up window tree hierarchy
Patch Set: Fix input events: EventDispatcher ignores container windows Created 4 years, 2 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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698