Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: Source/modules/fetch/FetchManager.cpp

Issue 1265133002: [1/3 blink] Support redirect option of Request and "opaqueredirect" response type. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/fetch/FetchManager.h" 6 #include "modules/fetch/FetchManager.h"
7 7
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h" 9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
(...skipping 19 matching lines...) Expand all
30 #include "modules/fetch/ResponseInit.h" 30 #include "modules/fetch/ResponseInit.h"
31 #include "platform/network/ResourceError.h" 31 #include "platform/network/ResourceError.h"
32 #include "platform/network/ResourceRequest.h" 32 #include "platform/network/ResourceRequest.h"
33 #include "platform/network/ResourceResponse.h" 33 #include "platform/network/ResourceResponse.h"
34 #include "platform/weborigin/SecurityOrigin.h" 34 #include "platform/weborigin/SecurityOrigin.h"
35 #include "public/platform/WebURLRequest.h" 35 #include "public/platform/WebURLRequest.h"
36 #include "wtf/HashSet.h" 36 #include "wtf/HashSet.h"
37 37
38 namespace blink { 38 namespace blink {
39 39
40 namespace {
41
42 bool IsRedirectStatusCode(int statusCode)
43 {
44 return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statu sCode == 307 || statusCode == 308);
45 }
46
47 } // namespace
48
40 class FetchManager::Loader final : public NoBaseWillBeGarbageCollectedFinalized< FetchManager::Loader>, public ThreadableLoaderClient, public ContextLifecycleObs erver { 49 class FetchManager::Loader final : public NoBaseWillBeGarbageCollectedFinalized< FetchManager::Loader>, public ThreadableLoaderClient, public ContextLifecycleObs erver {
41 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader); 50 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader);
42 public: 51 public:
43 static PassOwnPtrWillBeRawPtr<Loader> create(ExecutionContext* executionCont ext, FetchManager* fetchManager, ScriptPromiseResolver* resolver, FetchRequestDa ta* request) 52 static PassOwnPtrWillBeRawPtr<Loader> create(ExecutionContext* executionCont ext, FetchManager* fetchManager, ScriptPromiseResolver* resolver, FetchRequestDa ta* request)
44 { 53 {
45 return adoptPtrWillBeNoop(new Loader(executionContext, fetchManager, res olver, request)); 54 return adoptPtrWillBeNoop(new Loader(executionContext, fetchManager, res olver, request));
46 } 55 }
47 56
48 ~Loader() override; 57 ~Loader() override;
49 DECLARE_VIRTUAL_TRACE(); 58 DECLARE_VIRTUAL_TRACE();
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } 132 }
124 } 133 }
125 FetchResponseData* responseData = FetchResponseData::createWithBuffer(new Bo dyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(handle))); 134 FetchResponseData* responseData = FetchResponseData::createWithBuffer(new Bo dyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(handle)));
126 responseData->setStatus(response.httpStatusCode()); 135 responseData->setStatus(response.httpStatusCode());
127 responseData->setStatusMessage(response.httpStatusText()); 136 responseData->setStatusMessage(response.httpStatusText());
128 for (auto& it : response.httpHeaderFields()) 137 for (auto& it : response.httpHeaderFields())
129 responseData->headerList()->append(it.key, it.value); 138 responseData->headerList()->append(it.key, it.value);
130 responseData->setURL(response.url()); 139 responseData->setURL(response.url());
131 responseData->setMIMEType(response.mimeType()); 140 responseData->setMIMEType(response.mimeType());
132 141
133 FetchResponseData* taintedResponse = responseData; 142 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
134 switch (m_request->tainting()) { 143
135 case FetchRequestData::BasicTainting: 144 if (IsRedirectStatusCode(m_responseHttpStatusCode)) {
yhirano 2015/08/07 14:22:02 ASSERT(redirect mode is "manual")?
horo 2015/08/07 15:39:53 Done.
136 taintedResponse = responseData->createBasicFilteredResponse(); 145 taintedResponse = responseData->createOpaqueRedirectFilteredResponse();
137 break; 146 } else {
138 case FetchRequestData::CORSTainting: 147 switch (m_request->tainting()) {
139 taintedResponse = responseData->createCORSFilteredResponse(); 148 case FetchRequestData::BasicTainting:
140 break; 149 taintedResponse = responseData->createBasicFilteredResponse();
141 case FetchRequestData::OpaqueTainting: 150 break;
142 taintedResponse = responseData->createOpaqueFilteredResponse(); 151 case FetchRequestData::CORSTainting:
143 break; 152 taintedResponse = responseData->createCORSFilteredResponse();
153 break;
154 case FetchRequestData::OpaqueTainting:
155 taintedResponse = responseData->createOpaqueFilteredResponse();
156 break;
157 }
144 } 158 }
145 Response* r = Response::create(m_resolver->executionContext(), taintedRespon se); 159 Response* r = Response::create(m_resolver->executionContext(), taintedRespon se);
146 r->headers()->setGuard(Headers::ImmutableGuard); 160 r->headers()->setGuard(Headers::ImmutableGuard);
147 m_resolver->resolve(r); 161 m_resolver->resolve(r);
148 m_resolver.clear(); 162 m_resolver.clear();
149 } 163 }
150 164
151 void FetchManager::Loader::didFinishLoading(unsigned long, double) 165 void FetchManager::Loader::didFinishLoading(unsigned long, double)
152 { 166 {
153 ASSERT(!m_failed); 167 ASSERT(!m_failed);
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 342
329 if (m_request->method() != "GET" && m_request->method() != "HEAD") { 343 if (m_request->method() != "GET" && m_request->method() != "HEAD") {
330 if (BodyStreamBuffer* buffer = m_request->buffer()) { 344 if (BodyStreamBuffer* buffer = m_request->buffer()) {
331 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandl e(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); 345 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandl e(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize);
332 RefPtr<FormData> httpBody(FormData::create()); 346 RefPtr<FormData> httpBody(FormData::create());
333 if (blobDataHandle) 347 if (blobDataHandle)
334 httpBody->appendBlob(blobDataHandle->uuid(), blobDataHandle); 348 httpBody->appendBlob(blobDataHandle->uuid(), blobDataHandle);
335 request.setHTTPBody(httpBody); 349 request.setHTTPBody(httpBody);
336 } 350 }
337 } 351 }
338 352 request.setFetchRedirectMode(m_request->redirect());
339 request.setUseStreamOnResponse(true); 353 request.setUseStreamOnResponse(true);
340 354
341 // "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer| 355 // "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer|
342 // is none, and `Referer`/|HTTPRequest|'s referrer, serialized and utf-8 356 // is none, and `Referer`/|HTTPRequest|'s referrer, serialized and utf-8
343 // encoded, otherwise, to HTTPRequest's header list. 357 // encoded, otherwise, to HTTPRequest's header list.
344 // We set the referrer using workerGlobalScope's URL in 358 // We set the referrer using workerGlobalScope's URL in
345 // WorkerThreadableLoader. 359 // WorkerThreadableLoader.
346 360
347 // "3. Append `Host`, ..." 361 // "3. Append `Host`, ..."
348 // FIXME: Implement this when the spec is fixed. 362 // FIXME: Implement this when the spec is fixed.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 471
458 DEFINE_TRACE(FetchManager) 472 DEFINE_TRACE(FetchManager)
459 { 473 {
460 #if ENABLE(OILPAN) 474 #if ENABLE(OILPAN)
461 visitor->trace(m_executionContext); 475 visitor->trace(m_executionContext);
462 visitor->trace(m_loaders); 476 visitor->trace(m_loaders);
463 #endif 477 #endif
464 } 478 }
465 479
466 } // namespace blink 480 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | Source/modules/fetch/FetchRequestData.h » ('j') | Source/modules/fetch/FetchResponseData.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698