Fix the issue that any tab/window closing hotkey will crash the Pepper Flash Fullscreen.
BUG=149821
TEST=None
Review URL: https://chromiumcodereview.appspot.com/10968037
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158408 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index fe9c088..a92e5d3 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -365,6 +365,12 @@
WebContentsImpl::~WebContentsImpl() {
is_being_destroyed_ = true;
+ for (std::set<RenderWidgetHostImpl*>::iterator iter =
+ created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
+ (*iter)->DetachDelegate();
+ }
+ created_widgets_.clear();
+
// Clear out any JavaScript state.
if (dialog_creator_)
dialog_creator_->ResetJavaScriptState(this);
@@ -1194,6 +1200,19 @@
delegate_->LostCapture();
}
+void WebContentsImpl::RenderWidgetDeleted(
+ RenderWidgetHostImpl* render_widget_host) {
+ if (is_being_destroyed_) {
+ // |created_widgets_| might have been destroyed.
+ return;
+ }
+
+ std::set<RenderWidgetHostImpl*>::iterator iter =
+ created_widgets_.find(render_widget_host);
+ if (iter != created_widgets_.end())
+ created_widgets_.erase(iter);
+}
+
bool WebContentsImpl::PreHandleKeyboardEvent(
const NativeWebKeyboardEvent& event,
bool* is_keyboard_shortcut) {
@@ -1356,6 +1375,8 @@
content::RenderProcessHost* process = GetRenderProcessHost();
RenderWidgetHostImpl* widget_host =
new RenderWidgetHostImpl(this, process, route_id);
+ created_widgets_.insert(widget_host);
+
RenderWidgetHostViewPort* widget_view =
RenderWidgetHostViewPort::CreateViewForWidget(widget_host);
if (!is_fullscreen) {