| Index: Source/core/loader/FrameLoader.cpp
|
| diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp
|
| index 313ba04b94a5bb3f6f4d5ae504f6bdea54c21134..0338a2a784e1ed97fa7a955db78b6a0be3d859fc 100644
|
| --- a/Source/core/loader/FrameLoader.cpp
|
| +++ b/Source/core/loader/FrameLoader.cpp
|
| @@ -629,21 +629,28 @@ void FrameLoader::loadInSameDocument(const KURL& url, PassRefPtr<SerializedScrip
|
| m_frame->localDOMWindow()->statePopped(stateObject ? stateObject : SerializedScriptValue::nullValue());
|
| }
|
|
|
| -void FrameLoader::setReferrerForFrameRequest(ResourceRequest& request, ShouldSendReferrer shouldSendReferrer, Document* originDocument)
|
| +void FrameLoader::setReferrerForFrameRequest(ResourceRequest& request, ReferrerPolicy referrerPolicy, Document* originDocument)
|
| {
|
| if (!originDocument)
|
| return;
|
| +
|
| // FIXME: This should be an assertion, but there's some plugin code in the chromium repo
|
| // that both determines its own referrer and expects to be associated with an originDocument.
|
| if (!request.httpReferrer().isEmpty())
|
| return;
|
| - if (shouldSendReferrer == NeverSendReferrer)
|
| +
|
| + if (referrerPolicy == ReferrerPolicyNever)
|
| return;
|
|
|
| + // TODO(burnik): This is hack. When the request has no specific referrerPolicy (e.g. default)
|
| + // we use the document's referrer policy instead.
|
| + if (referrerPolicy != originDocument->referrerPolicy() && referrerPolicy == ReferrerPolicyDefault)
|
| + referrerPolicy = originDocument->referrerPolicy();
|
| +
|
| // Always use the initiating document to generate the referrer.
|
| // We need to generateReferrer(), because we haven't enforced ReferrerPolicy or https->http
|
| // referrer suppression yet.
|
| - Referrer referrer = SecurityPolicy::generateReferrer(originDocument->referrerPolicy(), request.url(), originDocument->outgoingReferrer());
|
| + Referrer referrer = SecurityPolicy::generateReferrer(referrerPolicy, request.url(), originDocument->outgoingReferrer());
|
|
|
| request.setHTTPReferrer(referrer);
|
| RefPtr<SecurityOrigin> referrerOrigin = SecurityOrigin::createFromString(referrer.referrer);
|
| @@ -788,7 +795,9 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest)
|
| return;
|
| }
|
|
|
| - setReferrerForFrameRequest(request.resourceRequest(), request.shouldSendReferrer(), request.originDocument());
|
| + ASSERT(passedRequest.referrerPolicyForRequest() == passedRequest.referrerPolicyForRequest());
|
| +
|
| + setReferrerForFrameRequest(request.resourceRequest(), request.referrerPolicyForRequest(), request.originDocument());
|
|
|
| FrameLoadType newLoadType = determineFrameLoadType(request);
|
| NavigationPolicy policy = navigationPolicyForRequest(request);
|
| @@ -797,7 +806,7 @@ void FrameLoader::load(const FrameLoadRequest& passedRequest)
|
| client()->loadURLExternally(request.resourceRequest(), NavigationPolicyDownload);
|
| } else {
|
| request.resourceRequest().setFrameType(WebURLRequest::FrameTypeAuxiliary);
|
| - createWindowForRequest(request, *m_frame, policy, request.shouldSendReferrer());
|
| + createWindowForRequest(request, *m_frame, policy, request.referrerPolicyForRequest());
|
| }
|
| return;
|
| }
|
|
|