Chromium Code Reviews| Index: Source/core/loader/FrameLoader.cpp |
| diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp |
| index e63eca19569d0a418ff100f0d677b7740187d16d..2d62c050ac3cdf02aa843c43665e6fe284d36bf4 100644 |
| --- a/Source/core/loader/FrameLoader.cpp |
| +++ b/Source/core/loader/FrameLoader.cpp |
| @@ -664,7 +664,13 @@ FrameLoadType FrameLoader::determineFrameLoadType(const FrameLoadRequest& reques |
| return FrameLoadTypeReload; |
| if (request.resourceRequest().cachePolicy() == ReloadBypassingCache) |
| return FrameLoadTypeReloadFromOrigin; |
| - if (request.lockBackForwardList()) |
| + // From the HTML5 spec for location.assign(): |
| + // "If the browsing context's session history contains only one Document, |
| + // and that was the about:blank Document created when the browsing context |
| + // was created, then the navigation must be done with replacement enabled." |
| + if (request.lockBackForwardList() |
| + || (!m_stateMachine.committedMultipleRealLoads() |
| + && equalIgnoringCase(m_frame->document()->url(), blankURL()))) |
| return FrameLoadTypeRedirectWithLockedBackForwardList; |
| if (!request.originDocument() && request.resourceRequest().url() == m_documentLoader->urlForHistory()) |
| return FrameLoadTypeSame; |
| @@ -1211,17 +1217,9 @@ void FrameLoader::startLoad(FrameLoadRequest& frameLoadRequest, FrameLoadType ty |
| frameLoadRequest.resourceRequest().setFrameType(m_frame->isMainFrame() ? WebURLRequest::FrameTypeTopLevel : WebURLRequest::FrameTypeNested); |
| ResourceRequest& request = frameLoadRequest.resourceRequest(); |
| - // The current load should replace the history item if it is the first real |
|
Charlie Reis
2015/06/11 16:43:48
This was Nasko's original fix from https://coderev
|
| - // load of the frame. |
| - bool replacesCurrentHistoryItem = false; |
| - if (type == FrameLoadTypeRedirectWithLockedBackForwardList |
| - || !m_stateMachine.committedFirstRealDocumentLoad()) { |
| - replacesCurrentHistoryItem = true; |
| - } |
| - |
| m_policyDocumentLoader = client()->createDocumentLoader(m_frame, request, frameLoadRequest.substituteData().isValid() ? frameLoadRequest.substituteData() : defaultSubstituteDataForURL(request.url())); |
| m_policyDocumentLoader->setNavigationType(navigationType); |
| - m_policyDocumentLoader->setReplacesCurrentHistoryItem(replacesCurrentHistoryItem); |
| + m_policyDocumentLoader->setReplacesCurrentHistoryItem(type == FrameLoadTypeRedirectWithLockedBackForwardList); |
| m_policyDocumentLoader->setIsClientRedirect(frameLoadRequest.clientRedirect() == ClientRedirect); |
| // stopAllLoaders can detach the LocalFrame, so protect it. |