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

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

Issue 2516353002: Introduce url_list to the Response scheme of CacheStorage. (Closed)
Patch Set: Created 4 years 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 "modules/fetch/FetchManager.h" 5 #include "modules/fetch/FetchManager.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "bindings/core/v8/V8ThrowException.h" 10 #include "bindings/core/v8/V8ThrowException.h"
(...skipping 16 matching lines...) Expand all
27 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" 27 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h"
28 #include "modules/fetch/FetchRequestData.h" 28 #include "modules/fetch/FetchRequestData.h"
29 #include "modules/fetch/FormDataBytesConsumer.h" 29 #include "modules/fetch/FormDataBytesConsumer.h"
30 #include "modules/fetch/Response.h" 30 #include "modules/fetch/Response.h"
31 #include "modules/fetch/ResponseInit.h" 31 #include "modules/fetch/ResponseInit.h"
32 #include "platform/HTTPNames.h" 32 #include "platform/HTTPNames.h"
33 #include "platform/network/NetworkUtils.h" 33 #include "platform/network/NetworkUtils.h"
34 #include "platform/network/ResourceError.h" 34 #include "platform/network/ResourceError.h"
35 #include "platform/network/ResourceRequest.h" 35 #include "platform/network/ResourceRequest.h"
36 #include "platform/network/ResourceResponse.h" 36 #include "platform/network/ResourceResponse.h"
37 #include "platform/weborigin/KURL.h"
37 #include "platform/weborigin/SchemeRegistry.h" 38 #include "platform/weborigin/SchemeRegistry.h"
38 #include "platform/weborigin/SecurityOrigin.h" 39 #include "platform/weborigin/SecurityOrigin.h"
39 #include "platform/weborigin/SecurityPolicy.h" 40 #include "platform/weborigin/SecurityPolicy.h"
40 #include "platform/weborigin/Suborigin.h" 41 #include "platform/weborigin/Suborigin.h"
41 #include "public/platform/WebURLRequest.h" 42 #include "public/platform/WebURLRequest.h"
42 #include "wtf/HashSet.h" 43 #include "wtf/HashSet.h"
43 #include "wtf/Vector.h" 44 #include "wtf/Vector.h"
44 #include "wtf/text/WTFString.h" 45 #include "wtf/text/WTFString.h"
45 #include <memory> 46 #include <memory>
46 47
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 ScriptPromiseResolver* resolver, 148 ScriptPromiseResolver* resolver,
148 FetchRequestData* request, 149 FetchRequestData* request,
149 bool isIsolatedWorld) { 150 bool isIsolatedWorld) {
150 return new Loader(executionContext, fetchManager, resolver, request, 151 return new Loader(executionContext, fetchManager, resolver, request,
151 isIsolatedWorld); 152 isIsolatedWorld);
152 } 153 }
153 154
154 ~Loader() override; 155 ~Loader() override;
155 DECLARE_VIRTUAL_TRACE(); 156 DECLARE_VIRTUAL_TRACE();
156 157
158 void didReceiveRedirectTo(const KURL&) override;
157 void didReceiveResponse(unsigned long, 159 void didReceiveResponse(unsigned long,
158 const ResourceResponse&, 160 const ResourceResponse&,
159 std::unique_ptr<WebDataConsumerHandle>) override; 161 std::unique_ptr<WebDataConsumerHandle>) override;
160 void didFinishLoading(unsigned long, double) override; 162 void didFinishLoading(unsigned long, double) override;
161 void didFail(const ResourceError&) override; 163 void didFail(const ResourceError&) override;
162 void didFailAccessControlCheck(const ResourceError&) override; 164 void didFailAccessControlCheck(const ResourceError&) override;
163 void didFailRedirectCheck() override; 165 void didFailRedirectCheck() override;
164 166
165 void start(); 167 void start();
166 void dispose(); 168 void dispose();
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 Member<FetchManager> m_fetchManager; 277 Member<FetchManager> m_fetchManager;
276 Member<ScriptPromiseResolver> m_resolver; 278 Member<ScriptPromiseResolver> m_resolver;
277 Member<FetchRequestData> m_request; 279 Member<FetchRequestData> m_request;
278 Member<ThreadableLoader> m_loader; 280 Member<ThreadableLoader> m_loader;
279 bool m_failed; 281 bool m_failed;
280 bool m_finished; 282 bool m_finished;
281 int m_responseHttpStatusCode; 283 int m_responseHttpStatusCode;
282 Member<SRIVerifier> m_integrityVerifier; 284 Member<SRIVerifier> m_integrityVerifier;
283 bool m_didFinishLoading; 285 bool m_didFinishLoading;
284 bool m_isIsolatedWorld; 286 bool m_isIsolatedWorld;
287 Vector<KURL> m_urlList;
285 Member<ExecutionContext> m_executionContext; 288 Member<ExecutionContext> m_executionContext;
286 }; 289 };
287 290
288 FetchManager::Loader::Loader(ExecutionContext* executionContext, 291 FetchManager::Loader::Loader(ExecutionContext* executionContext,
289 FetchManager* fetchManager, 292 FetchManager* fetchManager,
290 ScriptPromiseResolver* resolver, 293 ScriptPromiseResolver* resolver,
291 FetchRequestData* request, 294 FetchRequestData* request,
292 bool isIsolatedWorld) 295 bool isIsolatedWorld)
293 : m_fetchManager(fetchManager), 296 : m_fetchManager(fetchManager),
294 m_resolver(resolver), 297 m_resolver(resolver),
295 m_request(request), 298 m_request(request),
296 m_failed(false), 299 m_failed(false),
297 m_finished(false), 300 m_finished(false),
298 m_responseHttpStatusCode(0), 301 m_responseHttpStatusCode(0),
299 m_integrityVerifier(nullptr), 302 m_integrityVerifier(nullptr),
300 m_didFinishLoading(false), 303 m_didFinishLoading(false),
301 m_isIsolatedWorld(isIsolatedWorld), 304 m_isIsolatedWorld(isIsolatedWorld),
302 m_executionContext(executionContext) { 305 m_executionContext(executionContext) {
303 ThreadState::current()->registerPreFinalizer(this); 306 ThreadState::current()->registerPreFinalizer(this);
307 m_urlList.append(request->url());
304 } 308 }
305 309
306 FetchManager::Loader::~Loader() { 310 FetchManager::Loader::~Loader() {
307 ASSERT(!m_loader); 311 ASSERT(!m_loader);
308 } 312 }
309 313
310 DEFINE_TRACE(FetchManager::Loader) { 314 DEFINE_TRACE(FetchManager::Loader) {
311 visitor->trace(m_fetchManager); 315 visitor->trace(m_fetchManager);
312 visitor->trace(m_resolver); 316 visitor->trace(m_resolver);
313 visitor->trace(m_request); 317 visitor->trace(m_request);
314 visitor->trace(m_loader); 318 visitor->trace(m_loader);
315 visitor->trace(m_integrityVerifier); 319 visitor->trace(m_integrityVerifier);
316 visitor->trace(m_executionContext); 320 visitor->trace(m_executionContext);
317 } 321 }
318 322
323 void FetchManager::Loader::didReceiveRedirectTo(const KURL& url) {
324 m_urlList.append(url);
325 }
326
319 void FetchManager::Loader::didReceiveResponse( 327 void FetchManager::Loader::didReceiveResponse(
320 unsigned long, 328 unsigned long,
321 const ResourceResponse& response, 329 const ResourceResponse& response,
322 std::unique_ptr<WebDataConsumerHandle> handle) { 330 std::unique_ptr<WebDataConsumerHandle> handle) {
323 ASSERT(handle); 331 ASSERT(handle);
332 // TODO(horo): This check could be false when we will use the response url
333 // in service worker responses. (crbug.com/553535)
334 DCHECK(response.url() == m_urlList.back());
falken 2016/11/30 14:57:37 nit: DCHECK_EQ
horo 2016/12/01 07:42:13 DCHECK_EQ with KURL causes compile failure. ../..
324 ScriptState* scriptState = m_resolver->getScriptState(); 335 ScriptState* scriptState = m_resolver->getScriptState();
325 ScriptState::Scope scope(scriptState); 336 ScriptState::Scope scope(scriptState);
326 337
327 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) { 338 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) {
328 // "If |blob| is null, return a network error." 339 // "If |blob| is null, return a network error."
329 // https://fetch.spec.whatwg.org/#concept-basic-fetch 340 // https://fetch.spec.whatwg.org/#concept-basic-fetch
330 performNetworkError("Blob not found."); 341 performNetworkError("Blob not found.");
331 return; 342 return;
332 } 343 }
333 344
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 scriptState->getExecutionContext(), std::move(handle)))); 427 scriptState->getExecutionContext(), std::move(handle))));
417 } else { 428 } else {
418 sriConsumer = new SRIBytesConsumer(); 429 sriConsumer = new SRIBytesConsumer();
419 responseData = FetchResponseData::createWithBuffer( 430 responseData = FetchResponseData::createWithBuffer(
420 new BodyStreamBuffer(scriptState, sriConsumer)); 431 new BodyStreamBuffer(scriptState, sriConsumer));
421 } 432 }
422 responseData->setStatus(response.httpStatusCode()); 433 responseData->setStatus(response.httpStatusCode());
423 responseData->setStatusMessage(response.httpStatusText()); 434 responseData->setStatusMessage(response.httpStatusText());
424 for (auto& it : response.httpHeaderFields()) 435 for (auto& it : response.httpHeaderFields())
425 responseData->headerList()->append(it.key, it.value); 436 responseData->headerList()->append(it.key, it.value);
426 responseData->setURL(response.url()); 437 if (response.urlListViaServiceWorker().isEmpty()) {
438 // Note: This list is empty, unless it came from a service worker, in which
439 // case it will only be empty if it was created through new Response().
falken 2016/11/30 14:57:37 nit: "This list" could plausibly mean |urlListViaS
horo 2016/12/01 07:42:13 Done.
440 responseData->setURLList(m_urlList);
441 } else {
442 DCHECK(response.wasFetchedViaServiceWorker());
443 responseData->setURLList(response.urlListViaServiceWorker());
444 }
427 responseData->setMIMEType(response.mimeType()); 445 responseData->setMIMEType(response.mimeType());
428 responseData->setResponseTime(response.responseTime()); 446 responseData->setResponseTime(response.responseTime());
429 447
430 FetchResponseData* taintedResponse = nullptr; 448 FetchResponseData* taintedResponse = nullptr;
431 449
432 if (NetworkUtils::isRedirectResponseCode(m_responseHttpStatusCode)) { 450 if (NetworkUtils::isRedirectResponseCode(m_responseHttpStatusCode)) {
433 Vector<String> locations; 451 Vector<String> locations;
434 responseData->headerList()->getAll(HTTPNames::Location, locations); 452 responseData->headerList()->getAll(HTTPNames::Location, locations);
435 if (locations.size() > 1) { 453 if (locations.size() > 1) {
436 performNetworkError("Multiple Location header."); 454 performNetworkError("Multiple Location header.");
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 m_loaders.remove(loader); 941 m_loaders.remove(loader);
924 loader->dispose(); 942 loader->dispose();
925 } 943 }
926 944
927 DEFINE_TRACE(FetchManager) { 945 DEFINE_TRACE(FetchManager) {
928 visitor->trace(m_loaders); 946 visitor->trace(m_loaders);
929 ContextLifecycleObserver::trace(visitor); 947 ContextLifecycleObserver::trace(visitor);
930 } 948 }
931 949
932 } // namespace blink 950 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698