diff options
author | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 10:34:29 +0000 |
---|---|---|
committer | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 10:34:29 +0000 |
commit | a635f9476f3efa8fc0690da8067dc41194822263 (patch) | |
tree | 82f08913c7d3b4a5354106f1f2f45d32e78cbaa8 | |
parent | f6b397243dc9e167e75740b34e3c29c7826feee7 (diff) | |
download | chromium_src-a635f9476f3efa8fc0690da8067dc41194822263.zip chromium_src-a635f9476f3efa8fc0690da8067dc41194822263.tar.gz chromium_src-a635f9476f3efa8fc0690da8067dc41194822263.tar.bz2 |
RenderWidget::Create returns NULL if RenderWidget::DoInit fails.
RenderThread::Get()->Send() fails if the tab is about to be closed and the IPC
channel was shut down.
BUG=158457
Review URL: https://chromiumcodereview.appspot.com/11473015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171758 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/renderer/render_widget.cc | 22 | ||||
-rw-r--r-- | content/renderer/render_widget.h | 4 | ||||
-rw-r--r-- | content/renderer/render_widget_fullscreen.cc | 4 | ||||
-rw-r--r-- | content/renderer/render_widget_fullscreen.h | 2 |
4 files changed, 18 insertions, 14 deletions
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 8eb8698..fdf034b 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -141,8 +141,10 @@ RenderWidget* RenderWidget::Create(int32 opener_id, DCHECK(opener_id != MSG_ROUTING_NONE); scoped_refptr<RenderWidget> widget( new RenderWidget(popup_type, screen_info, false)); - widget->Init(opener_id); // adds reference - return widget; + if (widget->Init(opener_id)) { // adds reference on success. + return widget; + } + return NULL; } // static @@ -163,14 +165,14 @@ WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { return NULL; } -void RenderWidget::Init(int32 opener_id) { - DoInit(opener_id, - RenderWidget::CreateWebWidget(this), - new ViewHostMsg_CreateWidget(opener_id, popup_type_, - &routing_id_, &surface_id_)); +bool RenderWidget::Init(int32 opener_id) { + return DoInit(opener_id, + RenderWidget::CreateWebWidget(this), + new ViewHostMsg_CreateWidget(opener_id, popup_type_, + &routing_id_, &surface_id_)); } -void RenderWidget::DoInit(int32 opener_id, +bool RenderWidget::DoInit(int32 opener_id, WebWidget* web_widget, IPC::SyncMessage* create_widget_message) { DCHECK(!webwidget_); @@ -186,8 +188,10 @@ void RenderWidget::DoInit(int32 opener_id, // Take a reference on behalf of the RenderThread. This will be balanced // when we receive ViewMsg_Close. AddRef(); + return true; } else { - DCHECK(false); + // The above Send can fail when the tab is closing. + return false; } } diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index b194ca5..e274806 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h @@ -205,10 +205,10 @@ class CONTENT_EXPORT RenderWidget // Initializes this view with the given opener. CompleteInit must be called // later. - void Init(int32 opener_id); + bool Init(int32 opener_id); // Called by Init and subclasses to perform initialization. - void DoInit(int32 opener_id, + bool DoInit(int32 opener_id, WebKit::WebWidget* web_widget, IPC::SyncMessage* create_widget_message); diff --git a/content/renderer/render_widget_fullscreen.cc b/content/renderer/render_widget_fullscreen.cc index 3094035..c45e2a8 100644 --- a/content/renderer/render_widget_fullscreen.cc +++ b/content/renderer/render_widget_fullscreen.cc @@ -35,10 +35,10 @@ WebWidget* RenderWidgetFullscreen::CreateWebWidget() { return RenderWidget::CreateWebWidget(this); } -void RenderWidgetFullscreen::Init(int32 opener_id) { +bool RenderWidgetFullscreen::Init(int32 opener_id) { DCHECK(!webwidget_); - RenderWidget::DoInit( + return RenderWidget::DoInit( opener_id, CreateWebWidget(), new ViewHostMsg_CreateFullscreenWidget( diff --git a/content/renderer/render_widget_fullscreen.h b/content/renderer/render_widget_fullscreen.h index 5570cf8..dfd1582 100644 --- a/content/renderer/render_widget_fullscreen.h +++ b/content/renderer/render_widget_fullscreen.h @@ -22,7 +22,7 @@ class RenderWidgetFullscreen : public RenderWidget { virtual WebKit::WebWidget* CreateWebWidget(); - void Init(int32 opener_id); + bool Init(int32 opener_id); }; } // namespace content |