Index: Source/core/loader/DocumentThreadableLoader.cpp |
diff --git a/Source/core/loader/DocumentThreadableLoader.cpp b/Source/core/loader/DocumentThreadableLoader.cpp |
index 3cdd83fde895b57f08203a6de78b8e26fdb8ef44..674d6bbac9ba750ae5a6cc288b4bedb456e810bb 100644 |
--- a/Source/core/loader/DocumentThreadableLoader.cpp |
+++ b/Source/core/loader/DocumentThreadableLoader.cpp |
@@ -236,6 +236,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); |
@@ -246,13 +252,19 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ |
// FIXME: Support redirect in Fetch API. |
if (resource->resourceRequest().requestContext() == blink::WebURLRequest::RequestContextFetch) { |
m_client->didFailRedirectCheck(); |
+ |
+ clearResource(); |
Nate Chapin
2014/10/24 17:09:31
If we call clearResource(), can we get ride of cle
tyoshino (SeeGerritForStatus)
2014/10/27 09:04:08
If the resource has only one client (this loader),
Nate Chapin
2014/10/29 23:37:25
I think it's probably ok to let the request contin
tyoshino (SeeGerritForStatus)
2014/11/05 13:36:09
canReuseRequest() currently check only corsEnabled
|
request = ResourceRequest(); |
+ |
return; |
} |
if (!isAllowedByPolicy(request.url())) { |
m_client->didFailRedirectCheck(); |
+ |
+ clearResource(); |
request = ResourceRequest(); |
+ |
m_requestStartedSeconds = 0.0; |
return; |
} |
@@ -319,7 +331,10 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ |
} else { |
m_client->didFailRedirectCheck(); |
} |
+ |
+ clearResource(); |
request = ResourceRequest(); |
+ |
m_requestStartedSeconds = 0.0; |
} |