Index: content/browser/renderer_host/render_widget_host_input_event_router.cc |
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc |
index 449b2f6850247e2b6f54da5d8ea38b04b60b73c7..d6059944d669068b6628788cd3b1a837ea2fdb0c 100644 |
--- a/content/browser/renderer_host/render_widget_host_input_event_router.cc |
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc |
@@ -11,13 +11,14 @@ |
namespace content { |
RenderWidgetHostInputEventRouter::RenderWidgetHostInputEventRouter() |
- : current_touch_target_(nullptr), active_touches_(0) {} |
+ : has_current_touch_target_(false), active_touches_(0) {} |
RenderWidgetHostInputEventRouter::~RenderWidgetHostInputEventRouter() { |
owner_map_.clear(); |
} |
-RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget( |
+RenderWidgetHostInputEventRouter::WeakTarget |
nasko
2015/12/22 18:16:33
Why does this method need to return the WeakTarget
wjmaclean
2015/12/22 18:39:55
It doesn't have to return the WeakPtr ... I'll cha
|
+RenderWidgetHostInputEventRouter::FindEventTarget( |
RenderWidgetHostViewBase* root_view, |
const gfx::Point& point, |
gfx::Point* transformed_point) { |
@@ -25,7 +26,7 @@ RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget( |
// hit testing. |
if (owner_map_.size() <= 1) { |
*transformed_point = point; |
- return root_view; |
+ return root_view->GetWeakPtr(); |
} |
// The conversion of point to transform_point is done over the course of the |
@@ -40,7 +41,7 @@ RenderWidgetHostViewBase* RenderWidgetHostInputEventRouter::FindEventTarget( |
// it likely means the RenderWidgetHostView has been destroyed but its |
// parent frame has not sent a new compositor frame since that happened. |
if (iter == owner_map_.end()) |
- return root_view; |
+ return root_view->GetWeakPtr(); |
return iter->second; |
} |
@@ -48,24 +49,26 @@ void RenderWidgetHostInputEventRouter::RouteMouseEvent( |
RenderWidgetHostViewBase* root_view, |
blink::WebMouseEvent* event) { |
gfx::Point transformed_point; |
- RenderWidgetHostViewBase* target = FindEventTarget( |
- root_view, gfx::Point(event->x, event->y), &transformed_point); |
+ WeakTarget target = FindEventTarget(root_view, gfx::Point(event->x, event->y), |
+ &transformed_point); |
event->x = transformed_point.x(); |
event->y = transformed_point.y(); |
- target->ProcessMouseEvent(*event); |
+ if (target) |
nasko
2015/12/22 18:16:33
Let'd use early returns - if (!target) return, rig
wjmaclean
2015/12/22 18:39:55
Done.
|
+ target->ProcessMouseEvent(*event); |
} |
void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent( |
RenderWidgetHostViewBase* root_view, |
blink::WebMouseWheelEvent* event) { |
gfx::Point transformed_point; |
- RenderWidgetHostViewBase* target = FindEventTarget( |
- root_view, gfx::Point(event->x, event->y), &transformed_point); |
+ WeakTarget target = FindEventTarget(root_view, gfx::Point(event->x, event->y), |
+ &transformed_point); |
event->x = transformed_point.x(); |
event->y = transformed_point.y(); |
- target->ProcessMouseWheelEvent(*event); |
+ if (target) |
nasko
2015/12/22 18:16:33
Same as above, early return.
wjmaclean
2015/12/22 18:39:55
Done.
|
+ target->ProcessMouseWheelEvent(*event); |
} |
void RenderWidgetHostInputEventRouter::RouteTouchEvent( |
@@ -83,23 +86,29 @@ void RenderWidgetHostInputEventRouter::RouteTouchEvent( |
event->touches[0].position.y); |
current_touch_target_ = |
FindEventTarget(root_view, original_point, &transformed_point); |
nasko
2015/12/22 18:16:33
You could just call ->GetWeakPtr() here, since it
wjmaclean
2015/12/22 18:39:55
I don't understand? You mean call it on current_to
|
+ has_current_touch_target_ = true; |
Fady Samuel
2015/12/22 18:06:43
Is this flag necessary? It seems you only use it f
|
} |
++active_touches_; |
- current_touch_target_->ProcessTouchEvent(*event, latency); |
+ if (current_touch_target_.get()) |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
break; |
} |
case blink::WebInputEvent::TouchMove: |
- DCHECK(current_touch_target_); |
- current_touch_target_->ProcessTouchEvent(*event, latency); |
+ DCHECK(has_current_touch_target_); |
+ if (current_touch_target_.get()) |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
break; |
case blink::WebInputEvent::TouchEnd: |
case blink::WebInputEvent::TouchCancel: |
DCHECK(active_touches_); |
- DCHECK(current_touch_target_); |
- current_touch_target_->ProcessTouchEvent(*event, latency); |
+ DCHECK(has_current_touch_target_); |
+ if (current_touch_target_.get()) |
+ current_touch_target_->ProcessTouchEvent(*event, latency); |
--active_touches_; |
- if (!active_touches_) |
- current_touch_target_ = nullptr; |
+ if (!active_touches_) { |
+ current_touch_target_ = WeakTarget(); |
+ has_current_touch_target_ = false; |
+ } |
break; |
default: |
NOTREACHED(); |
@@ -110,7 +119,7 @@ void RenderWidgetHostInputEventRouter::AddSurfaceIdNamespaceOwner( |
uint32_t id, |
RenderWidgetHostViewBase* owner) { |
DCHECK(owner_map_.find(id) == owner_map_.end()); |
- owner_map_.insert(std::make_pair(id, owner)); |
+ owner_map_.insert(std::make_pair(id, owner->GetWeakPtr())); |
} |
void RenderWidgetHostInputEventRouter::RemoveSurfaceIdNamespaceOwner( |