Chromium Code Reviews| 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| |