Index: chrome/browser/ui/gtk/extensions/native_app_window_gtk.cc |
diff --git a/chrome/browser/ui/gtk/extensions/native_app_window_gtk.cc b/chrome/browser/ui/gtk/extensions/native_app_window_gtk.cc |
index 41548348631785edfc6cae66b59ef5669edf26ad..0d88fcc3b3a7caf3e4127ed57c115b853e62b5e4 100644 |
--- a/chrome/browser/ui/gtk/extensions/native_app_window_gtk.cc |
+++ b/chrome/browser/ui/gtk/extensions/native_app_window_gtk.cc |
@@ -7,6 +7,7 @@ |
#include <gdk/gdkx.h> |
#include <vector> |
+#include "base/message_loop/message_loop.h" |
#include "base/message_loop/message_pump_gtk.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -243,12 +244,15 @@ void NativeAppWindowGtk::Close() { |
// To help catch bugs in any event handlers that might get fired during the |
// destruction, set window_ to NULL before any handlers will run. |
window_ = NULL; |
- |
- // OnNativeClose does a delete this so no other members should |
- // be accessed after. gtk_widget_destroy is safe (and must |
- // be last). |
- shell_window_->OnNativeClose(); |
gtk_widget_destroy(window); |
+ |
+ // On other platforms, the native window doesn't get destroyed synchronously. |
+ // We simulate that here so that ShellWindow can assume that it doesn't get |
+ // deleted immediately upon calling Close(). |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&ShellWindow::OnNativeClose, |
+ base::Unretained(shell_window_))); |
} |
void NativeAppWindowGtk::Activate() { |