| Index: Source/core/loader/FrameLoader.cpp
|
| diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp
|
| index c973368e0dddfd1e43d707f42fc200e97b2b2c9f..dc8c56e0ed192e4c9933178cf0656e5e4aed3a04 100644
|
| --- a/Source/core/loader/FrameLoader.cpp
|
| +++ b/Source/core/loader/FrameLoader.cpp
|
| @@ -817,7 +817,7 @@ ResourceRequest FrameLoader::requestFromHistoryItem(HistoryItem* item, ResourceR
|
| return request;
|
| }
|
|
|
| -void FrameLoader::reload(ReloadPolicy reloadPolicy, const KURL& overrideURL, const AtomicString& overrideEncoding)
|
| +void FrameLoader::reload(ReloadPolicy reloadPolicy, const KURL& overrideURL, const AtomicString& overrideEncoding, ClientRedirectPolicy clientRedirectPolicy)
|
| {
|
| if (!m_currentItem)
|
| return;
|
| @@ -826,13 +826,23 @@ void FrameLoader::reload(ReloadPolicy reloadPolicy, const KURL& overrideURL, con
|
| ResourceRequest request = requestFromHistoryItem(m_currentItem.get(), cachePolicy);
|
| request.setFrameType(m_frame->isMainFrame() ? WebURLRequest::FrameTypeTopLevel : WebURLRequest::FrameTypeNested);
|
| request.setRequestContext(WebURLRequest::RequestContextInternal);
|
| +
|
| + // ClientRedirectPolicy is an indication that this load was triggered by
|
| + // some direct interaction with the page. If this reload is not a client
|
| + // redirect, we should reuse the referrer from the original load of the
|
| + // current document. If this reload is a client redirect (e.g., location.reload()),
|
| + // it was initiated by something in the current document and should
|
| + // therefore show the current document's url as the referrer.
|
| + if (clientRedirectPolicy == ClientRedirect)
|
| + request.setHTTPReferrer(Referrer(m_frame->document()->outgoingReferrer(), m_frame->document()->referrerPolicy()));
|
| +
|
| if (!overrideURL.isEmpty()) {
|
| request.setURL(overrideURL);
|
| request.clearHTTPReferrer();
|
| }
|
|
|
| FrameLoadType type = reloadPolicy == EndToEndReload ? FrameLoadTypeReloadFromOrigin : FrameLoadTypeReload;
|
| - loadWithNavigationAction(NavigationAction(request, type), type, nullptr, SubstituteData(), CheckContentSecurityPolicy, NotClientRedirect, overrideEncoding);
|
| + loadWithNavigationAction(NavigationAction(request, type), type, nullptr, SubstituteData(), CheckContentSecurityPolicy, clientRedirectPolicy, overrideEncoding);
|
| }
|
|
|
| void FrameLoader::stopAllLoaders()
|
|
|