Chromium Code Reviews| 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( |