Index: Source/core/loader/FrameLoader.cpp |
diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp |
index 0bb9bc66894e79f19d623da064e85fb2be17da8a..502617ce051308d32c9e0236bac11809df7be16b 100644 |
--- a/Source/core/loader/FrameLoader.cpp |
+++ b/Source/core/loader/FrameLoader.cpp |
@@ -731,10 +731,10 @@ FrameLoadType FrameLoader::determineFrameLoadType(const FrameLoadRequest& reques |
|| (!m_stateMachine.committedMultipleRealLoads() |
&& equalIgnoringCase(m_frame->document()->url(), blankURL()))) |
return FrameLoadTypeRedirectWithLockedBackForwardList; |
- if (!request.originDocument() && request.resourceRequest().url() == m_documentLoader->urlForHistory()) |
- return FrameLoadTypeSame; |
if (request.substituteData().failingURL() == m_documentLoader->urlForHistory() && m_loadType == FrameLoadTypeReload) |
return FrameLoadTypeReload; |
+ if (request.resourceRequest().url() == m_documentLoader->urlForHistory() && request.resourceRequest().httpMethod() != "POST") |
+ return FrameLoadTypeRedirectWithLockedBackForwardList; |
dcheng
2015/07/01 20:54:12
I don't think I completely understand this line.
|
return FrameLoadTypeStandard; |
} |
@@ -885,9 +885,7 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest, FrameLoadType fram |
const KURL& url = request.resourceRequest().url(); |
bool sameDocumentHistoryNavigation = |
isBackForwardLoadType(newLoadType) && historyLoadType == HistorySameDocumentLoad; |
- bool sameDocumentNavigation = policy == NavigationPolicyCurrentTab |
- && shouldPerformFragmentNavigation( |
- request.form(), request.resourceRequest().httpMethod(), newLoadType, url); |
+ bool sameDocumentNavigation = policy == NavigationPolicyCurrentTab && shouldPerformFragmentNavigation(request, newLoadType); |
// Perform same document navigation. |
if (sameDocumentHistoryNavigation || sameDocumentNavigation) { |
@@ -909,20 +907,7 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest, FrameLoadType fram |
return; |
} |
- // Perform navigation to a different document. |
- bool sameURL = url == m_documentLoader->urlForHistory(); |
startLoad(request, newLoadType, policy); |
- |
- // Example of this case are sites that reload the same URL with a different cookie |
- // driving the generated content, or a master frame with links that drive a target |
- // frame, where the user has clicked on the same link repeatedly. |
- if (sameURL |
- && !isBackForwardLoadType(frameLoadType) |
- && newLoadType != FrameLoadTypeReload |
- && newLoadType != FrameLoadTypeReloadFromOrigin |
- && request.resourceRequest().httpMethod() != "POST") { |
- m_loadType = FrameLoadTypeSame; |
- } |
} |
SubstituteData FrameLoader::defaultSubstituteDataForURL(const KURL& url) |
@@ -1199,14 +1184,15 @@ void FrameLoader::receivedMainResourceError(DocumentLoader* loader, const Resour |
checkCompleted(); |
} |
-bool FrameLoader::shouldPerformFragmentNavigation(bool isFormSubmission, const String& httpMethod, FrameLoadType loadType, const KURL& url) |
+bool FrameLoader::shouldPerformFragmentNavigation(const FrameLoadRequest& request, FrameLoadType loadType) |
{ |
+ const KURL& url = request.resourceRequest().url(); |
// We don't do this if we are submitting a form with method other than "GET", explicitly reloading, |
// currently displaying a frameset, or if the URL does not have a fragment. |
- return (!isFormSubmission || equalIgnoringCase(httpMethod, "GET")) |
+ return (!request.form() || equalIgnoringCase(request.resourceRequest().httpMethod(), "GET")) |
&& loadType != FrameLoadTypeReload |
&& loadType != FrameLoadTypeReloadFromOrigin |
- && loadType != FrameLoadTypeSame |
+ && (request.originDocument() || loadType != FrameLoadTypeRedirectWithLockedBackForwardList || url != m_documentLoader->urlForHistory()) |
dcheng
2015/07/01 20:54:12
I don't think I understand this either. I guess th
|
&& loadType != FrameLoadTypeBackForward |
&& url.hasFragmentIdentifier() |
&& equalIgnoringFragmentIdentifier(m_frame->document()->url(), url) |