Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 1457203002: Make WebContentsImpl aware of all of its RWHs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix RW destruction by Shutdown Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 878fdb7be889bc4a7f3dfcf32129d4eadbe1b142..6448c0c617b0124273c27b29a6f9e020e6397cff 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1293,7 +1293,13 @@ void WebContentsImpl::Observe(int type,
const NotificationDetails& details) {
switch (type) {
case NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: {
- RenderWidgetHost* host = Source<RenderWidgetHost>(source).ptr();
+ RenderWidgetHostImpl* host = Source<RenderWidgetHostImpl>(source).ptr();
+
+ std::set<RenderWidgetHostImpl*>::iterator iter =
+ created_widgets_.find(host);
+ if (iter != created_widgets_.end())
+ created_widgets_.erase(iter);
Charlie Reis 2015/11/20 18:41:41 Why is this part necessary? Won't we take care of
Avi (use Gerrit) 2015/11/20 19:06:30 Side comment: Why do you check to see if the widge
lazyboy 2015/11/20 23:52:05 Thanks I've updated the relevant places. (Side eff
lazyboy 2015/11/20 23:52:05 Yes it would have, however there's a WCI::is_being
Charlie Reis 2015/11/21 01:19:19 Hmm, that CL didn't add any tests to prevent regre
lazyboy 2015/11/21 02:22:59 Yes, I've tried with and without flash fullscreen.
+
RenderWidgetHostView* view = host->GetView();
if (view == GetFullscreenRenderWidgetHostView()) {
// We cannot just call view_->RestoreFocus() here. On some platforms,
@@ -1488,6 +1494,14 @@ void WebContentsImpl::LostCapture(RenderWidgetHostImpl* render_widget_host) {
delegate_->LostCapture();
}
+void WebContentsImpl::RenderWidgetCreated(
+ RenderWidgetHostImpl* render_widget_host) {
+ std::set<RenderWidgetHostImpl*>::iterator iter =
+ created_widgets_.find(render_widget_host);
Avi (use Gerrit) 2015/11/20 19:06:30 You totally can use "auto" here.
lazyboy 2015/11/20 23:52:05 Not required anymore.
+ if (iter == created_widgets_.end())
+ created_widgets_.insert(render_widget_host);
Avi (use Gerrit) 2015/11/20 19:06:30 Same thing; you should be able to blindly insert.
lazyboy 2015/11/20 23:52:05 Done.
+}
+
void WebContentsImpl::RenderWidgetDeleted(
RenderWidgetHostImpl* render_widget_host) {
if (is_being_destroyed_) {
@@ -1908,7 +1922,6 @@ void WebContentsImpl::CreateNewWidget(int32 render_process_id,
RenderWidgetHostImpl* widget_host =
new RenderWidgetHostImpl(this, process, route_id, IsHidden());
- created_widgets_.insert(widget_host);
RenderWidgetHostViewBase* widget_view =
static_cast<RenderWidgetHostViewBase*>(

Powered by Google App Engine
This is Rietveld 408576698