Index: Source/core/loader/FrameLoader.cpp |
diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp |
index aec927f70fce8f141332367ba3ac98bb860abb58..110cf41ab19735ef20b91c4fe7b12b1829c9ae2b 100644 |
--- a/Source/core/loader/FrameLoader.cpp |
+++ b/Source/core/loader/FrameLoader.cpp |
@@ -1125,14 +1125,13 @@ void FrameLoader::loadWithNavigationAction(const ResourceRequest& request, const |
if (type == FrameLoadTypeRedirectWithLockedBackForwardList) |
loader->setIsClientRedirect(true); |
- m_loadType = type; |
bool isFormSubmission = formState; |
if (shouldPerformFragmentNavigation(isFormSubmission, request.httpMethod(), type, request.url())) |
- checkNavigationPolicyAndContinueFragmentScroll(action); |
+ checkNavigationPolicyAndContinueFragmentScroll(action, type != FrameLoadTypeRedirectWithLockedBackForwardList); |
else { |
setPolicyDocumentLoader(loader.get()); |
- checkNavigationPolicyAndContinueLoad(formState); |
+ checkNavigationPolicyAndContinueLoad(formState, type); |
} |
} |
@@ -1930,7 +1929,7 @@ void FrameLoader::receivedMainResourceError(const ResourceError& error) |
checkLoadComplete(); |
} |
-void FrameLoader::checkNavigationPolicyAndContinueFragmentScroll(const NavigationAction& action) |
+void FrameLoader::checkNavigationPolicyAndContinueFragmentScroll(const NavigationAction& action, bool isNewNavigation) |
{ |
m_documentLoader->setTriggeringAction(action); |
@@ -1943,7 +1942,7 @@ void FrameLoader::checkNavigationPolicyAndContinueFragmentScroll(const Navigatio |
m_provisionalDocumentLoader->stopLoading(); |
setProvisionalDocumentLoader(0); |
} |
- loadInSameDocument(request.url(), 0, m_loadType != FrameLoadTypeRedirectWithLockedBackForwardList); |
+ loadInSameDocument(request.url(), 0, isNewNavigation); |
} |
bool FrameLoader::shouldPerformFragmentNavigation(bool isFormSubmission, const String& httpMethod, FrameLoadType loadType, const KURL& url) |
@@ -2040,7 +2039,7 @@ bool FrameLoader::fireBeforeUnloadEvent(Chrome& chrome) |
return chrome.runBeforeUnloadConfirmPanel(text, m_frame); |
} |
-void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> formState) |
+void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> formState, FrameLoadType type) |
{ |
// If we loaded an alternate page to replace an unreachableURL, we'll get in here with a |
// nil policyDataSource because loading the alternate page will have passed |
@@ -2080,7 +2079,7 @@ void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> for |
// If the navigation request came from the back/forward menu, and we punt on it, we have the |
// problem that we have optimistically moved the b/f cursor already, so move it back. For sanity, |
// we only do this when punting a navigation for the target frame or top-level frame. |
- if ((isTargetItem || isLoadingMainFrame()) && isBackForwardLoadType(m_loadType)) { |
+ if ((isTargetItem || isLoadingMainFrame()) && isBackForwardLoadType(type)) { |
if (Page* page = m_frame->page()) { |
Frame* mainFrame = page->mainFrame(); |
if (HistoryItem* resetItem = mainFrame->loader()->history()->currentItem()) |
@@ -2104,6 +2103,7 @@ void FrameLoader::checkNavigationPolicyAndContinueLoad(PassRefPtr<FormState> for |
} |
setProvisionalDocumentLoader(m_policyDocumentLoader.get()); |
+ m_loadType = type; |
setState(FrameStateProvisional); |
setPolicyDocumentLoader(0); |