Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index 4cf3d03a075fc6ec12ef12785cf345281597bb78..df99c91977c538699099a62f0ad60a85a9fb9597 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -1198,6 +1198,18 @@ void RenderWidgetHostImpl::RendererExited(base::TerminationStatus status, |
// Reset some fields in preparation for recovering from a crash. |
ResetSizeAndRepaintPendingFlags(); |
current_size_.SetSize(0, 0); |
+ // After the renderer crashes, the view is destroyed and so the |
+ // RenderWidgetHost cannot track its visibility anymore. We assume such |
+ // RenderWidgetHost to be visible for the sake of internal accounting - be |
+ // careful about changing this - see http://crbug.com/401859. |
+ // |
+ // We need to at least make sure that the RenderProcessHost is notified about |
+ // the |is_hidden_| change, so that the renderer will have correct visibility |
+ // set when respawned. |
+ if (!is_hidden_) { |
+ process_->WidgetRestored(); |
+ is_hidden_ = false; |
+ } |
// Reset this to ensure the hung renderer mechanism is working properly. |
in_flight_event_count_ = 0; |