diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/renderer/render_view.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/render_widget.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/render_widget.h | 3 |
3 files changed, 6 insertions, 7 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 3d74340..b8bd897 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -282,9 +282,7 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, decrement_shared_popup_at_destruction_ = false; } - // Avoid a leak here by not assigning, since WebView::Create addrefs for us. - WebWidget* view = WebView::Create(this, webkit_prefs); - webwidget_.swap(&view); + webwidget_ = WebView::Create(this, webkit_prefs); // Don't let WebCore keep a B/F list - we have our own. // We let it keep 1 entry because FrameLoader::goToItem expects an item in the diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc index 1b20ee7..7d23d36 100644 --- a/chrome/renderer/render_widget.cc +++ b/chrome/renderer/render_widget.cc @@ -76,6 +76,7 @@ DeferredCloses* DeferredCloses::current_ = NULL; RenderWidget::RenderWidget(RenderThreadBase* render_thread, bool activatable) : routing_id_(MSG_ROUTING_NONE), + webwidget_(NULL), opener_id_(MSG_ROUTING_NONE), render_thread_(render_thread), host_window_(NULL), @@ -101,6 +102,7 @@ RenderWidget::RenderWidget(RenderThreadBase* render_thread, bool activatable) } RenderWidget::~RenderWidget() { + DCHECK(!webwidget_) << "Leaking our WebWidget!"; if (current_paint_buf_) { RenderProcess::FreeSharedMemory(current_paint_buf_); current_paint_buf_ = NULL; @@ -129,9 +131,7 @@ void RenderWidget::Init(int32 opener_id) { if (opener_id != MSG_ROUTING_NONE) opener_id_ = opener_id; - // Avoid a leak here by not assigning, since WebWidget::Create addrefs for us. - WebWidget* webwidget = WebWidget::Create(this); - webwidget_.swap(&webwidget); + webwidget_ = WebWidget::Create(this); bool result = render_thread_->Send( new ViewHostMsg_CreateWidget(opener_id, activatable_, &routing_id_)); diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h index 56ba30c..4153ce0 100644 --- a/chrome/renderer/render_widget.h +++ b/chrome/renderer/render_widget.h @@ -165,7 +165,8 @@ class RenderWidget : public IPC::Channel::Listener, // RenderWidgetHost. When MSG_ROUTING_NONE, no messages may be sent. int32 routing_id_; - scoped_refptr<WebWidget> webwidget_; + // We are responsible for destroying this object via its Close method. + WebWidget* webwidget_; // Set to the ID of the view that initiated creating this view, if any. When // the view was initiated by the browser (the common case), this will be |