Index: Source/modules/fetch/FetchManager.cpp |
diff --git a/Source/modules/fetch/FetchManager.cpp b/Source/modules/fetch/FetchManager.cpp |
index 634370cc1daf4525dcf6ac9b0528a77a25634745..0807bd70091aa9254759674d9437f34663569bb6 100644 |
--- a/Source/modules/fetch/FetchManager.cpp |
+++ b/Source/modules/fetch/FetchManager.cpp |
@@ -37,6 +37,15 @@ |
namespace blink { |
+namespace { |
+ |
+bool IsRedirectStatusCode(int statusCode) |
+{ |
+ return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statusCode == 307 || statusCode == 308); |
+} |
+ |
+} // namespace |
+ |
class FetchManager::Loader final : public NoBaseWillBeGarbageCollectedFinalized<FetchManager::Loader>, public ThreadableLoaderClient, public ContextLifecycleObserver { |
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader); |
public: |
@@ -131,16 +140,21 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo |
responseData->setMIMEType(response.mimeType()); |
FetchResponseData* taintedResponse = responseData; |
falken
2015/08/07 07:39:12
Should this be initialized to nullptr? It looks li
horo
2015/08/07 09:19:33
Done.
I changed these code to fix the layout test
|
- switch (m_request->tainting()) { |
- case FetchRequestData::BasicTainting: |
- taintedResponse = responseData->createBasicFilteredResponse(); |
- break; |
- case FetchRequestData::CORSTainting: |
- taintedResponse = responseData->createCORSFilteredResponse(); |
- break; |
- case FetchRequestData::OpaqueTainting: |
- taintedResponse = responseData->createOpaqueFilteredResponse(); |
- break; |
+ |
+ if (IsRedirectStatusCode(m_responseHttpStatusCode)) { |
yhirano
2015/08/07 14:22:02
ASSERT(redirect mode is "manual")?
horo
2015/08/07 15:39:53
Done.
|
+ taintedResponse = responseData->createOpaqueRedirectFilteredResponse(); |
+ } else { |
+ switch (m_request->tainting()) { |
+ case FetchRequestData::BasicTainting: |
+ taintedResponse = responseData->createBasicFilteredResponse(); |
+ break; |
+ case FetchRequestData::CORSTainting: |
+ taintedResponse = responseData->createCORSFilteredResponse(); |
+ break; |
+ case FetchRequestData::OpaqueTainting: |
+ taintedResponse = responseData->createOpaqueFilteredResponse(); |
+ break; |
+ } |
} |
Response* r = Response::create(m_resolver->executionContext(), taintedResponse); |
r->headers()->setGuard(Headers::ImmutableGuard); |
@@ -335,7 +349,7 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla |
request.setHTTPBody(httpBody); |
} |
} |
- |
+ request.setFetchRedirectMode(m_request->redirect()); |
request.setUseStreamOnResponse(true); |
// "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer| |