| Index: Source/core/loader/FrameLoader.cpp
|
| diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp
|
| index adf56fc1b060cff3143e707a4906056bd0ea9c7a..10c9a76d2e93b1fc62b6945af5ceb11e32a740e1 100644
|
| --- a/Source/core/loader/FrameLoader.cpp
|
| +++ b/Source/core/loader/FrameLoader.cpp
|
| @@ -1077,6 +1077,8 @@ void FrameLoader::loadURL(const KURL& newURL, const String& referrer, const Stri
|
| addHTTPOriginIfNeeded(request, referrerOrigin->toString());
|
| }
|
|
|
| + ASSERT(newLoadType != FrameLoadTypeSame);
|
| +
|
| // The search for a target frame is done earlier in the case of form submission.
|
| Frame* targetFrame = isFormSubmission ? 0 : findFrameForNavigation(frameName);
|
| if (targetFrame && targetFrame != m_frame) {
|
| @@ -1094,7 +1096,13 @@ void FrameLoader::loadURL(const KURL& newURL, const String& referrer, const Stri
|
| return;
|
| }
|
|
|
| + bool sameURL = shouldTreatURLAsSameAsCurrent(newURL);
|
| loadWithNavigationAction(request, action, newLoadType, formState.release(), defaultSubstituteDataForURL(request.url()));
|
| + // 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 && newLoadType != FrameLoadTypeReload && newLoadType != FrameLoadTypeReloadFromOrigin)
|
| + m_loadType = FrameLoadTypeSame;
|
| }
|
|
|
| SubstituteData FrameLoader::defaultSubstituteDataForURL(const KURL& url)
|
| @@ -1130,7 +1138,7 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest)
|
|
|
| FrameLoadType type;
|
| if (shouldTreatURLAsSameAsCurrent(r.url()))
|
| - type = FrameLoadTypeReload;
|
| + type = FrameLoadTypeSame;
|
| else if (shouldTreatURLAsSameAsCurrent(unreachableURL) && m_loadType == FrameLoadTypeReload)
|
| type = FrameLoadTypeReload;
|
| else
|
| @@ -2065,6 +2073,7 @@ bool FrameLoader::shouldPerformFragmentNavigation(bool isFormSubmission, const S
|
| return (!isFormSubmission || equalIgnoringCase(httpMethod, "GET"))
|
| && loadType != FrameLoadTypeReload
|
| && loadType != FrameLoadTypeReloadFromOrigin
|
| + && loadType != FrameLoadTypeSame
|
| && !shouldReload(m_frame->document()->url(), url)
|
| // We don't want to just scroll if a link from within a
|
| // frameset is trying to reload the frameset into _top.
|
|
|