Chromium Code Reviews| Index: content/renderer/render_view_impl.cc |
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
| index b21d9e047b9a4e914326cd43acb012f2db1e9439..e2a406ee54ce3168b733506e9fcd6a9dc2823802 100644 |
| --- a/content/renderer/render_view_impl.cc |
| +++ b/content/renderer/render_view_impl.cc |
| @@ -955,11 +955,11 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) { |
| ApplyWebPreferences(webkit_preferences_, webview()); |
| - main_render_frame_.reset( |
| - RenderFrameImpl::Create(this, params->main_frame_routing_id)); |
| + main_render_frame_ = |
| + RenderFrameImpl::Create(this, params->main_frame_routing_id); |
| // The main frame WebFrame object is closed by |
| // RenderViewImpl::frameDetached(). |
| - webview()->setMainFrame(WebFrame::create(main_render_frame_.get())); |
| + webview()->setMainFrame(WebFrame::create(main_render_frame_)); |
| if (switches::IsTouchDragDropEnabled()) |
| webview()->settings()->setTouchDragDropEnabled(true); |
| @@ -2555,7 +2555,7 @@ bool RenderViewImpl::enumerateChosenDirectory( |
| void RenderViewImpl::initializeHelperPluginWebFrame( |
| blink::WebHelperPlugin* plugin) { |
| - plugin->initializeFrame(main_render_frame_.get()); |
| + plugin->initializeFrame(main_render_frame_); |
| } |
| void RenderViewImpl::didStartLoading() { |
| @@ -3167,6 +3167,12 @@ void RenderViewImpl::didDisownOpener(blink::WebFrame* frame) { |
| } |
| void RenderViewImpl::frameDetached(WebFrame* frame) { |
| + if (!frame->parent()) { |
| + // We cannot rely on our main_render_frame_ anymore. It will be deleted as |
| + // part of RenderFrameImpl::frameDetached. We expect to be deleted |
| + // right away, but we clear this out to be safe. |
| + main_render_frame_ = NULL; |
|
Charlie Reis
2013/11/21 23:59:15
I added this as well, since I didn't like the idea
|
| + } |
| FOR_EACH_OBSERVER(RenderViewObserver, observers_, FrameDetached(frame)); |
| } |