Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(688)

Unified Diff: content/renderer/render_view_impl.cc

Issue 82033002: Always create FrameTreeNodes and RenderFrameHosts for every frame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Initial patch Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« content/renderer/render_view_impl.h ('K') | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
« content/renderer/render_view_impl.h ('K') | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698