summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 04:57:14 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 04:57:14 +0000
commit666ecd28cc344446d27d8748a21dfa3788e5462b (patch)
treeb49b6e4f5adba00c1092bb12905c353b91ca1b13 /chrome/browser/renderer_host
parentca13d804c304a61711352044022971ec39f9d4f8 (diff)
downloadchromium_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.cc9
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) {