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)); |
} |