diff options
Diffstat (limited to 'chrome/browser/renderer_host/render_widget_host.cc')
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc index dd14812..64fb609 100644 --- a/chrome/browser/renderer_host/render_widget_host.cc +++ b/chrome/browser/renderer_host/render_widget_host.cc @@ -47,7 +47,8 @@ static const int kHungRendererDelayMs = 20000; RenderWidgetHost::RenderWidgetHost(RenderProcessHost* process, int routing_id) - : view_(NULL), + : renderer_initialized_(false), + view_(NULL), process_(process), routing_id_(routing_id), is_loading_(false), @@ -81,6 +82,8 @@ RenderWidgetHost::~RenderWidgetHost() { void RenderWidgetHost::Init() { DCHECK(process_->channel()); + renderer_initialized_ = true; + // Send the ack along with the information on placement. gfx::NativeView plugin_view = view_->GetPluginNativeView(); Send(new ViewMsg_CreatingNew_ACK(routing_id_, @@ -159,8 +162,10 @@ void RenderWidgetHost::WasRestored() { } void RenderWidgetHost::WasResized() { - if (resize_ack_pending_ || !process_->channel() || !view_) + if (resize_ack_pending_ || !process_->channel() || !view_ || + !renderer_initialized_) { return; + } gfx::Rect view_bounds = view_->GetViewBounds(); gfx::Size new_size(view_bounds.width(), view_bounds.height()); @@ -347,6 +352,10 @@ void RenderWidgetHost::ForwardInputEvent(const WebInputEvent& input_event, } void RenderWidgetHost::RendererExited() { + // Clearing this flag causes us to re-create the renderer when recovering + // from a crashed renderer. + renderer_initialized_ = false; + // Must reset these to ensure that mouse move events work with a new renderer. mouse_move_pending_ = false; next_mouse_move_.reset(); |