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

Unified Diff: Source/core/loader/FrameLoader.cpp

Issue 1052993006: Refactor frame navigation/detach state cleanup to be more sane. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Consolidate ScriptForbiddenScope Created 5 years, 9 months 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
Index: Source/core/loader/FrameLoader.cpp
diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp
index 922fb8214a549fff262e326be04cf7f61258e42b..1fa96613bb515abf95ae473bcaec6fbe85b45194 100644
--- a/Source/core/loader/FrameLoader.cpp
+++ b/Source/core/loader/FrameLoader.cpp
@@ -242,7 +242,6 @@ void FrameLoader::clear()
m_frame->editor().clear();
m_frame->document()->cancelParsing();
- m_frame->document()->prepareForDestruction();
m_frame->document()->removeFocusedElementOfSubtree(m_frame->document());
m_frame->selection().prepareForDestruction();
m_frame->eventHandler().clear();
@@ -279,13 +278,16 @@ void FrameLoader::replaceDocumentWhileExecutingJavaScriptURL(const String& sourc
init.withNewRegistrationContext();
stopAllLoaders();
- clear();
+ m_frame->detachChildren();
- // clear() potentially detaches the frame from the document. The
+ // detachChildren() potentially detaches the frame from the document. The
// loading cannot continue in that case.
if (!m_frame->page())
return;
+ m_frame->document()->prepareForDestruction();
+ clear();
+
documentLoader->replaceDocumentWhileExecutingJavaScriptURL(init, source, ownerDocument);
}
@@ -970,6 +972,8 @@ void FrameLoader::commitProvisionalLoad()
if (m_documentLoader)
m_documentLoader->detachFromFrame();
m_documentLoader = m_provisionalDocumentLoader.release();
+ if (m_frame->document())
+ m_frame->document()->prepareForDestruction();
if (isLoadingMainFrame())
m_frame->page()->chrome().client().needTouchEvents(false);

Powered by Google App Engine
This is Rietveld 408576698