summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/render_widget_host_view_base.cc
diff options
context:
space:
mode:
authorccameron <ccameron@chromium.org>2014-09-05 13:12:52 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-05 20:15:02 +0000
commitc54cc7cb4a7910f83b6501f8122b06ba5c8b3a45 (patch)
tree4c5eb78eb0a9066059f3793c5e94c994fbaba6cb /content/browser/renderer_host/render_widget_host_view_base.cc
parent4bdcf21dcc119bdf3bea37e4a97e6ef0c05517bb (diff)
downloadchromium_src-c54cc7cb4a7910f83b6501f8122b06ba5c8b3a45.zip
chromium_src-c54cc7cb4a7910f83b6501f8122b06ba5c8b3a45.tar.gz
chromium_src-c54cc7cb4a7910f83b6501f8122b06ba5c8b3a45.tar.bz2
Speculative fix for DelegatedFrameHost destructor crashes
It appears that RenderWidgetHostViewMac::Destroy is never getting called in some instances, and that is resulting in crashes when we end up in its destructor, which is called by Objective C's runtime. I suspect that this is a leak somewhere, and that on other platforms we simply never call the destructor. Call the necessary bits of RenderWidgetHostViewMac::Destroy to avoid crash when a RenderWidgetHostImpl reaches its destructor before its view_ has been reset. Also, turn the weak pointers to RenderWidgetHostViewBase in RenderWidgetHostImpl and RenderWidgetHostViewGuest to use base::WeakPtr to prevent the many dangling instances. BUG=404828 Review URL: https://codereview.chromium.org/538883002 Cr-Commit-Position: refs/heads/master@{#293573}
Diffstat (limited to 'content/browser/renderer_host/render_widget_host_view_base.cc')
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index 060adffc..51fd023 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -374,7 +374,8 @@ RenderWidgetHostViewBase::RenderWidgetHostViewBase()
current_device_scale_factor_(0),
current_display_rotation_(gfx::Display::ROTATE_0),
pinch_zoom_enabled_(content::IsPinchToZoomEnabled()),
- renderer_frame_number_(0) {
+ renderer_frame_number_(0),
+ weak_factory_(this) {
}
RenderWidgetHostViewBase::~RenderWidgetHostViewBase() {
@@ -535,6 +536,10 @@ bool RenderWidgetHostViewBase::HasDisplayPropertyChanged(gfx::NativeView view) {
return true;
}
+base::WeakPtr<RenderWidgetHostViewBase> RenderWidgetHostViewBase::GetWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+}
+
scoped_ptr<SyntheticGestureTarget>
RenderWidgetHostViewBase::CreateSyntheticGestureTarget() {
RenderWidgetHostImpl* host =