| Index: Source/core/loader/DocumentThreadableLoader.cpp
|
| diff --git a/Source/core/loader/DocumentThreadableLoader.cpp b/Source/core/loader/DocumentThreadableLoader.cpp
|
| index 2e13905e227776b707c16480c5983a66d2098570..72498ea1958f27e071d2bcfc6ca80a63fd084b6c 100644
|
| --- a/Source/core/loader/DocumentThreadableLoader.cpp
|
| +++ b/Source/core/loader/DocumentThreadableLoader.cpp
|
| @@ -94,6 +94,7 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document& document, Threadabl
|
| , m_timeoutTimer(this, &DocumentThreadableLoader::didTimeout)
|
| , m_requestStartedSeconds(0.0)
|
| , m_corsRedirectLimit(kMaxCORSRedirects)
|
| + , m_redirectMode(request.fetchRedirectMode())
|
| {
|
| ASSERT(client);
|
| // Setting an outgoing referer is only supported in the async code path.
|
| @@ -269,7 +270,14 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
|
|
|
| RefPtr<DocumentThreadableLoader> protect(this);
|
|
|
| - if (!isAllowedByContentSecurityPolicy(request.url(), ContentSecurityPolicy::DidRedirect)) {
|
| + if (m_redirectMode == WebURLRequest::FetchRedirectModeManual) {
|
| + responseReceived(resource, redirectResponse, nullptr);
|
| + clearResource();
|
| + request = ResourceRequest();
|
| + return;
|
| + }
|
| +
|
| + if (m_redirectMode == WebURLRequest::FetchRedirectModeError || !isAllowedByContentSecurityPolicy(request.url(), ContentSecurityPolicy::DidRedirect)) {
|
| m_client->didFailRedirectCheck();
|
|
|
| clearResource();
|
|
|