diff options
author | ccameron <ccameron@chromium.org> | 2014-09-05 13:12:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-05 20:15:02 +0000 |
commit | c54cc7cb4a7910f83b6501f8122b06ba5c8b3a45 (patch) | |
tree | 4c5eb78eb0a9066059f3793c5e94c994fbaba6cb /content/browser/renderer_host/render_widget_host_view_base.cc | |
parent | 4bdcf21dcc119bdf3bea37e4a97e6ef0c05517bb (diff) | |
download | chromium_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.cc | 7 |
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 = |