diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-14 04:57:14 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-14 04:57:14 +0000 |
commit | 666ecd28cc344446d27d8748a21dfa3788e5462b (patch) | |
tree | b49b6e4f5adba00c1092bb12905c353b91ca1b13 /chrome/browser/renderer_host | |
parent | ca13d804c304a61711352044022971ec39f9d4f8 (diff) | |
download | chromium_src-666ecd28cc344446d27d8748a21dfa3788e5462b.zip chromium_src-666ecd28cc344446d27d8748a21dfa3788e5462b.tar.gz chromium_src-666ecd28cc344446d27d8748a21dfa3788e5462b.tar.bz2 |
Linux: Delay the deletion of the RWHVGtk object.
This object may be deleted within a signal handler for its widget, which causes a DCHECK. Fix by using MessageLoop::DeleteSoon() instead.
BUG=http://www.crbug.com/11847
TEST=Open browser, navigate to www.google.com. Navigate to www.yahoo.com. This will delete the old RWHV. It shouldn't crash.
Review URL: http://codereview.chromium.org/113316
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16039 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host_view_gtk.cc | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc index d2e3a19..38faf57 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc @@ -10,7 +10,9 @@ #include <cairo/cairo.h> #include "base/logging.h" +#include "base/message_loop.h" #include "base/string_util.h" +#include "base/task.h" #include "chrome/common/native_web_keyboard_event.h" #include "chrome/common/render_messages.h" #include "chrome/common/x11_util.h" @@ -166,6 +168,7 @@ RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host) } RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() { + view_.Destroy(); } void RenderWidgetHostViewGtk::InitAsChild() { @@ -305,11 +308,7 @@ void RenderWidgetHostViewGtk::Destroy() { gtk_widget_destroy(gtk_widget_get_parent(view_.get())); } - // We need to disconnect ourselves from our parent widget at this time; this - // does the right thing, automatically removing ourselves from our parent - // container. - view_.Destroy(); - delete this; + MessageLoop::current()->DeleteSoon(FROM_HERE, this); } void RenderWidgetHostViewGtk::SetTooltipText(const std::wstring& tooltip_text) { |