summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host/render_widget_host.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/renderer_host/render_widget_host.cc')
-rw-r--r--chrome/browser/renderer_host/render_widget_host.cc13
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();