| Index: third_party/WebKit/Source/core/loader/PingLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/PingLoader.cpp b/third_party/WebKit/Source/core/loader/PingLoader.cpp
|
| index 956cc975a14c432b310e98ef0777481f61f21a14..90b2a070e1f176639c3677ffa73c17da156f4394 100644
|
| --- a/third_party/WebKit/Source/core/loader/PingLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/PingLoader.cpp
|
| @@ -220,6 +220,7 @@ class PingLoaderImpl : public GarbageCollectedFinalized<PingLoaderImpl>,
|
| String m_url;
|
| unsigned long m_identifier;
|
| SelfKeepAlive<PingLoaderImpl> m_keepAlive;
|
| + AtomicString m_initiator;
|
|
|
| bool m_isBeacon;
|
|
|
| @@ -237,6 +238,7 @@ PingLoaderImpl::PingLoaderImpl(LocalFrame* frame,
|
| m_url(request.url()),
|
| m_identifier(createUniqueIdentifier()),
|
| m_keepAlive(this),
|
| + m_initiator(initiator),
|
| m_isBeacon(isBeacon),
|
| m_origin(frame->document()->getSecurityOrigin()),
|
| m_corsMode(IsCORSEnabled) {
|
| @@ -290,42 +292,47 @@ void PingLoaderImpl::dispose() {
|
| bool PingLoaderImpl::willFollowRedirect(
|
| WebURLRequest& passedNewRequest,
|
| const WebURLResponse& passedRedirectResponse) {
|
| - if (!m_isBeacon)
|
| - return true;
|
| -
|
| - if (m_corsMode == NotCORSEnabled)
|
| - return true;
|
| -
|
| - DCHECK(passedNewRequest.allowStoredCredentials());
|
| -
|
| - ResourceRequest& newRequest(passedNewRequest.toMutableResourceRequest());
|
| - const ResourceResponse& redirectResponse(
|
| - passedRedirectResponse.toResourceResponse());
|
| -
|
| - DCHECK(!newRequest.isNull());
|
| - DCHECK(!redirectResponse.isNull());
|
| -
|
| - String errorDescription;
|
| - ResourceLoaderOptions options;
|
| - // TODO(tyoshino): Save updated data in options.securityOrigin and pass it
|
| - // on the next time.
|
| - if (!CrossOriginAccessControl::handleRedirect(
|
| - m_origin, newRequest, redirectResponse, AllowStoredCredentials,
|
| - options, errorDescription)) {
|
| - if (m_frame) {
|
| - if (m_frame->document()) {
|
| - m_frame->document()->addConsoleMessage(ConsoleMessage::create(
|
| - JSMessageSource, ErrorMessageLevel, errorDescription));
|
| + if (m_isBeacon && m_corsMode == IsCORSEnabled) {
|
| + DCHECK(passedNewRequest.allowStoredCredentials());
|
| +
|
| + ResourceRequest& newRequest(passedNewRequest.toMutableResourceRequest());
|
| + const ResourceResponse& redirectResponse(
|
| + passedRedirectResponse.toResourceResponse());
|
| +
|
| + DCHECK(!newRequest.isNull());
|
| + DCHECK(!redirectResponse.isNull());
|
| +
|
| + String errorDescription;
|
| + ResourceLoaderOptions options;
|
| + // TODO(tyoshino): Save updated data in options.securityOrigin and pass it
|
| + // on the next time.
|
| + if (!CrossOriginAccessControl::handleRedirect(
|
| + m_origin, newRequest, redirectResponse, AllowStoredCredentials,
|
| + options, errorDescription)) {
|
| + if (m_frame) {
|
| + if (m_frame->document()) {
|
| + m_frame->document()->addConsoleMessage(ConsoleMessage::create(
|
| + JSMessageSource, ErrorMessageLevel, errorDescription));
|
| + }
|
| }
|
| - }
|
| - // Cancel the load and self destruct.
|
| - dispose();
|
| + // Cancel the load and self destruct.
|
| + dispose();
|
|
|
| - return false;
|
| + return false;
|
| + }
|
| }
|
| // FIXME: http://crbug.com/427429 is needed to correctly propagate updates of
|
| // Origin: following this successful redirect.
|
|
|
| + if (m_frame && m_frame->document()) {
|
| + FetchInitiatorInfo initiatorInfo;
|
| + initiatorInfo.name = m_initiator;
|
| + FetchContext& fetchContext = m_frame->document()->fetcher()->context();
|
| + fetchContext.dispatchWillSendRequest(
|
| + m_identifier, passedNewRequest.toMutableResourceRequest(),
|
| + passedRedirectResponse.toResourceResponse(), initiatorInfo);
|
| + }
|
| +
|
| return true;
|
| }
|
|
|
|
|