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

Unified Diff: content/browser/renderer_host/render_widget_host_input_event_router.cc

Issue 1545683002: Use WeakPtr to RenderWidgetHostViewBase in InputEventRouter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_input_event_router.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « content/browser/renderer_host/render_widget_host_input_event_router.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698