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

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

Issue 2804023004: Replace ASSERT with DCHECK in modules/fetch. (Closed)
Patch Set: Created 3 years, 8 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 "modules/fetch/FetchManager.h" 5 #include "modules/fetch/FetchManager.h"
6 6
7 #include <memory> 7 #include <memory>
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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 m_updater(updater), 185 m_updater(updater),
186 m_response(response), 186 m_response(response),
187 m_loader(loader), 187 m_loader(loader),
188 m_integrityMetadata(integrityMetadata), 188 m_integrityMetadata(integrityMetadata),
189 m_url(url), 189 m_url(url),
190 m_finished(false) { 190 m_finished(false) {
191 m_reader = m_handle->obtainReader(this); 191 m_reader = m_handle->obtainReader(this);
192 } 192 }
193 193
194 void didGetReadable() override { 194 void didGetReadable() override {
195 ASSERT(m_reader); 195 DCHECK(m_reader);
196 ASSERT(m_loader); 196 DCHECK(m_loader);
197 ASSERT(m_response); 197 DCHECK(m_response);
198 198
199 WebDataConsumerHandle::Result r = WebDataConsumerHandle::Ok; 199 WebDataConsumerHandle::Result r = WebDataConsumerHandle::Ok;
200 while (r == WebDataConsumerHandle::Ok) { 200 while (r == WebDataConsumerHandle::Ok) {
201 const void* buffer; 201 const void* buffer;
202 size_t size; 202 size_t size;
203 r = m_reader->beginRead(&buffer, WebDataConsumerHandle::FlagNone, 203 r = m_reader->beginRead(&buffer, WebDataConsumerHandle::FlagNone,
204 &size); 204 &size);
205 if (r == WebDataConsumerHandle::Ok) { 205 if (r == WebDataConsumerHandle::Ok) {
206 m_buffer.append(static_cast<const char*>(buffer), size); 206 m_buffer.append(static_cast<const char*>(buffer), size);
207 m_reader->endRead(size); 207 m_reader->endRead(size);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 m_finished(false), 301 m_finished(false),
302 m_responseHttpStatusCode(0), 302 m_responseHttpStatusCode(0),
303 m_integrityVerifier(nullptr), 303 m_integrityVerifier(nullptr),
304 m_didFinishLoading(false), 304 m_didFinishLoading(false),
305 m_isIsolatedWorld(isIsolatedWorld), 305 m_isIsolatedWorld(isIsolatedWorld),
306 m_executionContext(executionContext) { 306 m_executionContext(executionContext) {
307 m_urlList.push_back(request->url()); 307 m_urlList.push_back(request->url());
308 } 308 }
309 309
310 FetchManager::Loader::~Loader() { 310 FetchManager::Loader::~Loader() {
311 ASSERT(!m_loader); 311 DCHECK(!m_loader);
312 } 312 }
313 313
314 DEFINE_TRACE(FetchManager::Loader) { 314 DEFINE_TRACE(FetchManager::Loader) {
315 visitor->trace(m_fetchManager); 315 visitor->trace(m_fetchManager);
316 visitor->trace(m_resolver); 316 visitor->trace(m_resolver);
317 visitor->trace(m_request); 317 visitor->trace(m_request);
318 visitor->trace(m_loader); 318 visitor->trace(m_loader);
319 visitor->trace(m_integrityVerifier); 319 visitor->trace(m_integrityVerifier);
320 visitor->trace(m_executionContext); 320 visitor->trace(m_executionContext);
321 } 321 }
322 322
323 void FetchManager::Loader::didReceiveRedirectTo(const KURL& url) { 323 void FetchManager::Loader::didReceiveRedirectTo(const KURL& url) {
324 m_urlList.push_back(url); 324 m_urlList.push_back(url);
325 } 325 }
326 326
327 void FetchManager::Loader::didReceiveResponse( 327 void FetchManager::Loader::didReceiveResponse(
328 unsigned long, 328 unsigned long,
329 const ResourceResponse& response, 329 const ResourceResponse& response,
330 std::unique_ptr<WebDataConsumerHandle> handle) { 330 std::unique_ptr<WebDataConsumerHandle> handle) {
331 ASSERT(handle); 331 DCHECK(handle);
332 // TODO(horo): This check could be false when we will use the response url 332 // TODO(horo): This check could be false when we will use the response url
333 // in service worker responses. (crbug.com/553535) 333 // in service worker responses. (crbug.com/553535)
334 DCHECK(response.url() == m_urlList.back()); 334 DCHECK(response.url() == m_urlList.back());
335 ScriptState* scriptState = m_resolver->getScriptState(); 335 ScriptState* scriptState = m_resolver->getScriptState();
336 ScriptState::Scope scope(scriptState); 336 ScriptState::Scope scope(scriptState);
337 337
338 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) { 338 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) {
339 // "If |blob| is null, return a network error." 339 // "If |blob| is null, return a network error."
340 // https://fetch.spec.whatwg.org/#concept-basic-fetch 340 // https://fetch.spec.whatwg.org/#concept-basic-fetch
341 performNetworkError("Blob not found."); 341 performNetworkError("Blob not found.");
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 if (locations.size() > 1) { 454 if (locations.size() > 1) {
455 performNetworkError("Multiple Location header."); 455 performNetworkError("Multiple Location header.");
456 return; 456 return;
457 } 457 }
458 if (locations.size() == 1) { 458 if (locations.size() == 1) {
459 KURL locationURL(m_request->url(), locations[0]); 459 KURL locationURL(m_request->url(), locations[0]);
460 if (!locationURL.isValid()) { 460 if (!locationURL.isValid()) {
461 performNetworkError("Invalid Location header."); 461 performNetworkError("Invalid Location header.");
462 return; 462 return;
463 } 463 }
464 ASSERT(m_request->redirect() == WebURLRequest::FetchRedirectModeManual); 464 DCHECK(m_request->redirect() == WebURLRequest::FetchRedirectModeManual);
tkent 2017/04/08 02:29:54 Use DCHECK_EQ if it doesn't cause a build failure.
465 taintedResponse = responseData->createOpaqueRedirectFilteredResponse(); 465 taintedResponse = responseData->createOpaqueRedirectFilteredResponse();
466 } 466 }
467 // When the location header doesn't exist, we don't treat the response 467 // When the location header doesn't exist, we don't treat the response
468 // as a redirect response, and execute tainting. 468 // as a redirect response, and execute tainting.
469 } 469 }
470 if (!taintedResponse) { 470 if (!taintedResponse) {
471 switch (tainting) { 471 switch (tainting) {
472 case FetchRequestData::BasicTainting: 472 case FetchRequestData::BasicTainting:
473 taintedResponse = responseData->createBasicFilteredResponse(); 473 taintedResponse = responseData->createBasicFilteredResponse();
474 break; 474 break;
(...skipping 20 matching lines...) Expand all
495 // whose name is `Content-Type` and value is the MIME type and 495 // whose name is `Content-Type` and value is the MIME type and
496 // parameters returned from obtaining a resource" 496 // parameters returned from obtaining a resource"
497 r->headers()->headerList()->remove(HTTPNames::Access_Control_Allow_Origin); 497 r->headers()->headerList()->remove(HTTPNames::Access_Control_Allow_Origin);
498 } 498 }
499 r->headers()->setGuard(Headers::ImmutableGuard); 499 r->headers()->setGuard(Headers::ImmutableGuard);
500 500
501 if (m_request->integrity().isEmpty()) { 501 if (m_request->integrity().isEmpty()) {
502 m_resolver->resolve(r); 502 m_resolver->resolve(r);
503 m_resolver.clear(); 503 m_resolver.clear();
504 } else { 504 } else {
505 ASSERT(!m_integrityVerifier); 505 DCHECK(!m_integrityVerifier);
506 m_integrityVerifier = 506 m_integrityVerifier =
507 new SRIVerifier(std::move(handle), sriConsumer, r, this, 507 new SRIVerifier(std::move(handle), sriConsumer, r, this,
508 m_request->integrity(), response.url()); 508 m_request->integrity(), response.url());
509 } 509 }
510 } 510 }
511 511
512 void FetchManager::Loader::didFinishLoading(unsigned long, double) { 512 void FetchManager::Loader::didFinishLoading(unsigned long, double) {
513 m_didFinishLoading = true; 513 m_didFinishLoading = true;
514 // If there is an integrity verifier, and it has not already finished, it 514 // If there is an integrity verifier, and it has not already finished, it
515 // will take care of finishing the load or performing a network error when 515 // will take care of finishing the load or performing a network error when
(...skipping 29 matching lines...) Expand all
545 } 545 }
546 546
547 Document* FetchManager::Loader::document() const { 547 Document* FetchManager::Loader::document() const {
548 if (m_executionContext->isDocument()) { 548 if (m_executionContext->isDocument()) {
549 return toDocument(m_executionContext); 549 return toDocument(m_executionContext);
550 } 550 }
551 return nullptr; 551 return nullptr;
552 } 552 }
553 553
554 void FetchManager::Loader::loadSucceeded() { 554 void FetchManager::Loader::loadSucceeded() {
555 ASSERT(!m_failed); 555 DCHECK(!m_failed);
556 556
557 m_finished = true; 557 m_finished = true;
558 558
559 if (document() && document()->frame() && document()->frame()->page() && 559 if (document() && document()->frame() && document()->frame()->page() &&
560 FetchUtils::isOkStatus(m_responseHttpStatusCode)) { 560 FetchUtils::isOkStatus(m_responseHttpStatusCode)) {
561 document()->frame()->page()->chromeClient().ajaxSucceeded( 561 document()->frame()->page()->chromeClient().ajaxSucceeded(
562 document()->frame()); 562 document()->frame());
563 } 563 }
564 probe::didFinishFetch(m_executionContext, this, m_request->method(), 564 probe::didFinishFetch(m_executionContext, this, m_request->method(),
565 m_request->url().getString()); 565 m_request->url().getString());
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 m_request->url().protocol() + "\" is not supported."); 703 m_request->url().protocol() + "\" is not supported.");
704 } 704 }
705 } 705 }
706 706
707 void FetchManager::Loader::performNetworkError(const String& message) { 707 void FetchManager::Loader::performNetworkError(const String& message) {
708 failed(message); 708 failed(message);
709 } 709 }
710 710
711 void FetchManager::Loader::performHTTPFetch(bool corsFlag, 711 void FetchManager::Loader::performHTTPFetch(bool corsFlag,
712 bool corsPreflightFlag) { 712 bool corsPreflightFlag) {
713 ASSERT( 713 DCHECK(
714 SchemeRegistry::shouldTreatURLSchemeAsSupportingFetchAPI( 714 SchemeRegistry::shouldTreatURLSchemeAsSupportingFetchAPI(
715 m_request->url().protocol()) || 715 m_request->url().protocol()) ||
716 (m_request->url().protocolIs("blob") && !corsFlag && !corsPreflightFlag)); 716 (m_request->url().protocolIs("blob") && !corsFlag && !corsPreflightFlag));
717 // CORS preflight fetch procedure is implemented inside 717 // CORS preflight fetch procedure is implemented inside
718 // DocumentThreadableLoader. 718 // DocumentThreadableLoader.
719 719
720 // "1. Let |HTTPRequest| be a copy of |request|, except that |HTTPRequest|'s 720 // "1. Let |HTTPRequest| be a copy of |request|, except that |HTTPRequest|'s
721 // body is a tee of |request|'s body." 721 // body is a tee of |request|'s body."
722 // We use ResourceRequest class for HTTPRequest. 722 // We use ResourceRequest class for HTTPRequest.
723 // FIXME: Support body. 723 // FIXME: Support body.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 ThreadableLoader::create(*m_executionContext, this, 842 ThreadableLoader::create(*m_executionContext, this,
843 threadableLoaderOptions, resourceLoaderOptions); 843 threadableLoaderOptions, resourceLoaderOptions);
844 m_loader->start(request); 844 m_loader->start(request);
845 } 845 }
846 846
847 // performDataFetch() is almost the same as performHTTPFetch(), except for: 847 // performDataFetch() is almost the same as performHTTPFetch(), except for:
848 // - We set AllowCrossOriginRequests to allow requests to data: URLs in 848 // - We set AllowCrossOriginRequests to allow requests to data: URLs in
849 // 'same-origin' mode. 849 // 'same-origin' mode.
850 // - We reject non-GET method. 850 // - We reject non-GET method.
851 void FetchManager::Loader::performDataFetch() { 851 void FetchManager::Loader::performDataFetch() {
852 ASSERT(m_request->url().protocolIsData()); 852 DCHECK(m_request->url().protocolIsData());
853 853
854 ResourceRequest request(m_request->url()); 854 ResourceRequest request(m_request->url());
855 request.setRequestContext(m_request->context()); 855 request.setRequestContext(m_request->context());
856 request.setUseStreamOnResponse(true); 856 request.setUseStreamOnResponse(true);
857 request.setHTTPMethod(m_request->method()); 857 request.setHTTPMethod(m_request->method());
858 request.setFetchRedirectMode(WebURLRequest::FetchRedirectModeError); 858 request.setFetchRedirectMode(WebURLRequest::FetchRedirectModeError);
859 // We intentionally skip 'setExternalRequestStateFromRequestorAddressSpace', 859 // We intentionally skip 'setExternalRequestStateFromRequestorAddressSpace',
860 // as 'data:' can never be external. 860 // as 'data:' can never be external.
861 861
862 ResourceLoaderOptions resourceLoaderOptions; 862 ResourceLoaderOptions resourceLoaderOptions;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 m_loaders.erase(loader); 932 m_loaders.erase(loader);
933 loader->dispose(); 933 loader->dispose();
934 } 934 }
935 935
936 DEFINE_TRACE(FetchManager) { 936 DEFINE_TRACE(FetchManager) {
937 visitor->trace(m_loaders); 937 visitor->trace(m_loaders);
938 ContextLifecycleObserver::trace(visitor); 938 ContextLifecycleObserver::trace(visitor);
939 } 939 }
940 940
941 } // namespace blink 941 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698