Index: content/browser/browser_plugin/browser_plugin_guest.cc |
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc |
index d1c6caa70571d17934a403df875256317881262a..fe659bea7b51b2a1c669500c1f5e440050981216 100644 |
--- a/content/browser/browser_plugin/browser_plugin_guest.cc |
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc |
@@ -275,7 +275,8 @@ BrowserPluginGuest::BrowserPluginGuest( |
pending_lock_request_(false), |
embedder_visible_(true), |
next_permission_request_id_(0), |
- has_render_view_(has_render_view) { |
+ has_render_view_(has_render_view), |
+ is_being_destroyed_(false) { |
DCHECK(web_contents); |
web_contents->SetDelegate(this); |
if (opener) |
@@ -320,11 +321,15 @@ void BrowserPluginGuest::DestroyUnattachedWindows() { |
} |
void BrowserPluginGuest::Destroy() { |
+ if (is_being_destroyed_) |
+ return; |
+ is_being_destroyed_ = true; |
if (!attached() && opener()) |
opener()->pending_new_windows_.erase(this); |
DestroyUnattachedWindows(); |
GetWebContents()->GetBrowserPluginGuestManager()->RemoveGuest(instance_id_); |
- delete GetWebContents(); |
+ if (!GetWebContents()->IsBeingDestroyed()) |
+ delete GetWebContents(); |
} |
bool BrowserPluginGuest::OnMessageReceivedFromEmbedder( |