| Index: Source/core/loader/DocumentThreadableLoader.cpp
|
| diff --git a/Source/core/loader/DocumentThreadableLoader.cpp b/Source/core/loader/DocumentThreadableLoader.cpp
|
| index 31ca937cb8f2aaa6ea673dc1b8a1ca514ab46e3c..a430b1b00ded78d66b84b6e7111a2c20b702046d 100644
|
| --- a/Source/core/loader/DocumentThreadableLoader.cpp
|
| +++ b/Source/core/loader/DocumentThreadableLoader.cpp
|
| @@ -246,6 +246,12 @@ void DocumentThreadableLoader::setDefersLoading(bool value)
|
| resource()->setDefersLoading(value);
|
| }
|
|
|
| +// In this method, we can clear |request| to tell content::WebURLLoaderImpl of
|
| +// Chromium not to follow the redirect. This works only when this method is
|
| +// called by RawResource::willSendRequest(). If called by
|
| +// RawResource::didAddClient(), clearing |request| won't be propagated
|
| +// to content::WebURLLoaderImpl. So, this loader must also get detached from
|
| +// the resource by calling clearResource().
|
| void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequest& request, const ResourceResponse& redirectResponse)
|
| {
|
| ASSERT(m_client);
|
| @@ -257,13 +263,19 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
|
| // FIXME: Support redirect in Fetch API.
|
| if (resource->resourceRequest().requestContext() == blink::WebURLRequest::RequestContextFetch) {
|
| m_client->didFailRedirectCheck();
|
| +
|
| + clearResource();
|
| request = ResourceRequest();
|
| +
|
| return;
|
| }
|
|
|
| if (!isAllowedByContentSecurityPolicy(request.url())) {
|
| m_client->didFailRedirectCheck();
|
| +
|
| + clearResource();
|
| request = ResourceRequest();
|
| +
|
| m_requestStartedSeconds = 0.0;
|
| return;
|
| }
|
| @@ -330,7 +342,10 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
|
| } else {
|
| m_client->didFailRedirectCheck();
|
| }
|
| +
|
| + clearResource();
|
| request = ResourceRequest();
|
| +
|
| m_requestStartedSeconds = 0.0;
|
| }
|
|
|
|
|