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

Side by Side Diff: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp

Issue 2327643003: Replace ASSERT*() with DCHECK*() in core/fetch/ and core/loader/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ASSERT_UNUSED Created 4 years, 3 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 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013, Intel Corporation 3 * Copyright (C) 2013, Intel Corporation
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 , m_isUsingDataConsumerHandle(false) 146 , m_isUsingDataConsumerHandle(false)
147 , m_async(blockingBehavior == LoadAsynchronously) 147 , m_async(blockingBehavior == LoadAsynchronously)
148 , m_requestContext(WebURLRequest::RequestContextUnspecified) 148 , m_requestContext(WebURLRequest::RequestContextUnspecified)
149 , m_timeoutTimer(this, &DocumentThreadableLoader::didTimeout) 149 , m_timeoutTimer(this, &DocumentThreadableLoader::didTimeout)
150 , m_requestStartedSeconds(0.0) 150 , m_requestStartedSeconds(0.0)
151 , m_corsRedirectLimit(m_options.crossOriginRequestPolicy == UseAccessControl ? kMaxCORSRedirects : 0) 151 , m_corsRedirectLimit(m_options.crossOriginRequestPolicy == UseAccessControl ? kMaxCORSRedirects : 0)
152 , m_redirectMode(WebURLRequest::FetchRedirectModeFollow) 152 , m_redirectMode(WebURLRequest::FetchRedirectModeFollow)
153 , m_didRedirect(false) 153 , m_didRedirect(false)
154 , m_weakFactory(this) 154 , m_weakFactory(this)
155 { 155 {
156 ASSERT(client); 156 DCHECK(client);
157 } 157 }
158 158
159 void DocumentThreadableLoader::start(const ResourceRequest& request) 159 void DocumentThreadableLoader::start(const ResourceRequest& request)
160 { 160 {
161 // Setting an outgoing referer is only supported in the async code path. 161 // Setting an outgoing referer is only supported in the async code path.
162 ASSERT(m_async || request.httpReferrer().isEmpty()); 162 DCHECK(m_async || request.httpReferrer().isEmpty());
163 163
164 m_sameOriginRequest = getSecurityOrigin()->canRequestNoSuborigin(request.url ()); 164 m_sameOriginRequest = getSecurityOrigin()->canRequestNoSuborigin(request.url ());
165 m_requestContext = request.requestContext(); 165 m_requestContext = request.requestContext();
166 m_redirectMode = request.fetchRedirectMode(); 166 m_redirectMode = request.fetchRedirectMode();
167 167
168 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == DenyCrossO riginRequests) { 168 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == DenyCrossO riginRequests) {
169 InspectorInstrumentation::documentThreadableLoaderFailedToStartLoadingFo rClient(m_document, m_client); 169 InspectorInstrumentation::documentThreadableLoaderFailedToStartLoadingFo rClient(m_document, m_client);
170 ThreadableLoaderClient* client = m_client; 170 ThreadableLoaderClient* client = m_client;
171 clear(); 171 clear();
172 client->didFail(ResourceError(errorDomainBlinkInternal, 0, request.url() .getString(), "Cross origin requests are not supported.")); 172 client->didFail(ResourceError(errorDomainBlinkInternal, 0, request.url() .getString(), "Cross origin requests are not supported."));
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 dispatchInitialRequest(newRequest); 256 dispatchInitialRequest(newRequest);
257 } 257 }
258 258
259 void DocumentThreadableLoader::dispatchInitialRequest(const ResourceRequest& req uest) 259 void DocumentThreadableLoader::dispatchInitialRequest(const ResourceRequest& req uest)
260 { 260 {
261 if (!request.isExternalRequest() && (m_sameOriginRequest || m_options.crossO riginRequestPolicy == AllowCrossOriginRequests)) { 261 if (!request.isExternalRequest() && (m_sameOriginRequest || m_options.crossO riginRequestPolicy == AllowCrossOriginRequests)) {
262 loadRequest(request, m_resourceLoaderOptions); 262 loadRequest(request, m_resourceLoaderOptions);
263 return; 263 return;
264 } 264 }
265 265
266 ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl || request.isE xternalRequest()); 266 DCHECK(m_options.crossOriginRequestPolicy == UseAccessControl || request.isE xternalRequest());
267 267
268 makeCrossOriginAccessRequest(request); 268 makeCrossOriginAccessRequest(request);
269 } 269 }
270 270
271 void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques t& request) 271 void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques t& request)
272 { 272 {
273 ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl || request.isE xternalRequest()); 273 DCHECK(m_options.crossOriginRequestPolicy == UseAccessControl || request.isE xternalRequest());
274 ASSERT(m_client); 274 DCHECK(m_client);
275 ASSERT(!resource()); 275 DCHECK(!resource());
276 276
277 // Cross-origin requests are only allowed certain registered schemes. 277 // Cross-origin requests are only allowed certain registered schemes.
278 // We would catch this when checking response headers later, but there 278 // We would catch this when checking response headers later, but there
279 // is no reason to send a request, preflighted or not, that's guaranteed 279 // is no reason to send a request, preflighted or not, that's guaranteed
280 // to be denied. 280 // to be denied.
281 if (!SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(request.url().protoco l())) { 281 if (!SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(request.url().protoco l())) {
282 InspectorInstrumentation::documentThreadableLoaderFailedToStartLoadingFo rClient(m_document, m_client); 282 InspectorInstrumentation::documentThreadableLoaderFailedToStartLoadingFo rClient(m_document, m_client);
283 ThreadableLoaderClient* client = m_client; 283 ThreadableLoaderClient* client = m_client;
284 clear(); 284 clear();
285 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal , 0, request.url().getString(), "Cross origin requests are only supported for pr otocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + ".")); 285 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal , 0, request.url().getString(), "Cross origin requests are only supported for pr otocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + "."));
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 339 }
340 340
341 DocumentThreadableLoader::~DocumentThreadableLoader() 341 DocumentThreadableLoader::~DocumentThreadableLoader()
342 { 342 {
343 CHECK(!m_client); 343 CHECK(!m_client);
344 DCHECK(!m_resource); 344 DCHECK(!m_resource);
345 } 345 }
346 346
347 void DocumentThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds ) 347 void DocumentThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds )
348 { 348 {
349 ASSERT(m_async); 349 DCHECK(m_async);
350 350
351 // |m_requestStartedSeconds| == 0.0 indicates loading is already finished 351 // |m_requestStartedSeconds| == 0.0 indicates loading is already finished
352 // and |m_timeoutTimer| is already stopped, and thus we do nothing for such 352 // and |m_timeoutTimer| is already stopped, and thus we do nothing for such
353 // cases. See https://crbug.com/551663 for details. 353 // cases. See https://crbug.com/551663 for details.
354 if (m_requestStartedSeconds <= 0.0) 354 if (m_requestStartedSeconds <= 0.0)
355 return; 355 return;
356 356
357 m_timeoutTimer.stop(); 357 m_timeoutTimer.stop();
358 // At the time of this method's implementation, it is only ever called by 358 // At the time of this method's implementation, it is only ever called by
359 // XMLHttpRequest, when the timeout attribute is set after sending the 359 // XMLHttpRequest, when the timeout attribute is set after sending the
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 } 410 }
411 411
412 // In this method, we can clear |request| to tell content::WebURLLoaderImpl of 412 // In this method, we can clear |request| to tell content::WebURLLoaderImpl of
413 // Chromium not to follow the redirect. This works only when this method is 413 // Chromium not to follow the redirect. This works only when this method is
414 // called by RawResource::willSendRequest(). If called by 414 // called by RawResource::willSendRequest(). If called by
415 // RawResource::didAddClient(), clearing |request| won't be propagated 415 // RawResource::didAddClient(), clearing |request| won't be propagated
416 // to content::WebURLLoaderImpl. So, this loader must also get detached from 416 // to content::WebURLLoaderImpl. So, this loader must also get detached from
417 // the resource by calling clearResource(). 417 // the resource by calling clearResource().
418 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ est& request, const ResourceResponse& redirectResponse) 418 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ est& request, const ResourceResponse& redirectResponse)
419 { 419 {
420 ASSERT(m_client); 420 DCHECK(m_client);
421 ASSERT_UNUSED(resource, resource == this->resource()); 421 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
422 ASSERT(m_async); 422 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
423 DCHECK(m_async);
423 424
424 m_checker.redirectReceived(); 425 m_checker.redirectReceived();
425 426
426 if (!m_actualRequest.isNull()) { 427 if (!m_actualRequest.isNull()) {
427 reportResponseReceived(resource->identifier(), redirectResponse); 428 reportResponseReceived(resource->identifier(), redirectResponse);
428 429
429 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)"); 430 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)");
430 431
431 request = ResourceRequest(); 432 request = ResourceRequest();
432 433
433 return; 434 return;
434 } 435 }
435 436
436 if (m_redirectMode == WebURLRequest::FetchRedirectModeManual) { 437 if (m_redirectMode == WebURLRequest::FetchRedirectModeManual) {
437 // Keep |this| alive even if the client release a reference in 438 // Keep |this| alive even if the client release a reference in
438 // responseReceived(). 439 // responseReceived().
439 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr()); 440 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr());
440 441
441 // We use |m_redirectMode| to check the original redirect mode. 442 // We use |m_redirectMode| to check the original redirect mode.
442 // |request| is a new request for redirect. So we don't set the redirect 443 // |request| is a new request for redirect. So we don't set the redirect
443 // mode of it in WebURLLoaderImpl::Context::OnReceivedRedirect(). 444 // mode of it in WebURLLoaderImpl::Context::OnReceivedRedirect().
444 ASSERT(request.useStreamOnResponse()); 445 DCHECK(request.useStreamOnResponse());
445 // There is no need to read the body of redirect response because there 446 // There is no need to read the body of redirect response because there
446 // is no way to read the body of opaque-redirect filtered response's 447 // is no way to read the body of opaque-redirect filtered response's
447 // internal response. 448 // internal response.
448 // TODO(horo): If we support any API which expose the internal body, we 449 // TODO(horo): If we support any API which expose the internal body, we
449 // will have to read the body. And also HTTPCache changes will be needed 450 // will have to read the body. And also HTTPCache changes will be needed
450 // because it doesn't store the body of redirect responses. 451 // because it doesn't store the body of redirect responses.
451 responseReceived(resource, redirectResponse, wrapUnique(new EmptyDataHan dle())); 452 responseReceived(resource, redirectResponse, wrapUnique(new EmptyDataHan dle()));
452 453
453 if (!self) { 454 if (!self) {
454 request = ResourceRequest(); 455 request = ResourceRequest();
455 return; 456 return;
456 } 457 }
457 458
458 if (m_client) { 459 if (m_client) {
459 ASSERT(m_actualRequest.isNull()); 460 DCHECK(m_actualRequest.isNull());
460 notifyFinished(resource); 461 notifyFinished(resource);
461 } 462 }
462 463
463 request = ResourceRequest(); 464 request = ResourceRequest();
464 465
465 return; 466 return;
466 } 467 }
467 468
468 if (m_redirectMode == WebURLRequest::FetchRedirectModeError) { 469 if (m_redirectMode == WebURLRequest::FetchRedirectModeError) {
469 ThreadableLoaderClient* client = m_client; 470 ThreadableLoaderClient* client = m_client;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 m_checker.redirectBlocked(); 561 m_checker.redirectBlocked();
561 562
562 // Tells the client that a redirect was received but not followed (for an un known reason). 563 // Tells the client that a redirect was received but not followed (for an un known reason).
563 ThreadableLoaderClient* client = m_client; 564 ThreadableLoaderClient* client = m_client;
564 clear(); 565 clear();
565 client->didFailRedirectCheck(); 566 client->didFailRedirectCheck();
566 } 567 }
567 568
568 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent) 569 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent)
569 { 570 {
570 ASSERT(m_client); 571 DCHECK(m_client);
571 ASSERT_UNUSED(resource, resource == this->resource()); 572 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
572 ASSERT(m_async); 573 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
574 DCHECK(m_async);
573 575
574 m_checker.dataSent(); 576 m_checker.dataSent();
575 m_client->didSendData(bytesSent, totalBytesToBeSent); 577 m_client->didSendData(bytesSent, totalBytesToBeSent);
576 } 578 }
577 579
578 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength ) 580 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength )
579 { 581 {
580 ASSERT(m_client); 582 DCHECK(m_client);
581 ASSERT_UNUSED(resource, resource == this->resource()); 583 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
582 ASSERT(m_actualRequest.isNull()); 584 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
583 ASSERT(m_async); 585 DCHECK(m_actualRequest.isNull());
586 DCHECK(m_async);
584 587
585 m_checker.dataDownloaded(); 588 m_checker.dataDownloaded();
586 m_client->didDownloadData(dataLength); 589 m_client->didDownloadData(dataLength);
587 } 590 }
588 591
589 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info) 592 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info)
590 { 593 {
591 ASSERT(m_client); 594 DCHECK(m_client);
592 ASSERT_UNUSED(resource, resource == this->resource()); 595 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
593 ASSERT(m_async); 596 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
597 DCHECK(m_async);
594 598
595 m_client->didReceiveResourceTiming(info); 599 m_client->didReceiveResourceTiming(info);
596 } 600 }
597 601
598 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 602 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
599 { 603 {
600 ASSERT_UNUSED(resource, resource == this->resource()); 604 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
601 ASSERT(m_async); 605 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
606 DCHECK(m_async);
602 607
603 m_checker.responseReceived(); 608 m_checker.responseReceived();
604 609
605 if (handle) 610 if (handle)
606 m_isUsingDataConsumerHandle = true; 611 m_isUsingDataConsumerHandle = true;
607 612
608 handleResponse(resource->identifier(), response, std::move(handle)); 613 handleResponse(resource->identifier(), response, std::move(handle));
609 } 614 }
610 615
611 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse) 616 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse)
(...skipping 24 matching lines...) Expand all
636 } 641 }
637 642
638 CrossOriginPreflightResultCache::shared().appendEntry(getSecurityOrigin()->t oString(), m_actualRequest.url(), std::move(preflightResult)); 643 CrossOriginPreflightResultCache::shared().appendEntry(getSecurityOrigin()->t oString(), m_actualRequest.url(), std::move(preflightResult));
639 } 644 }
640 645
641 void DocumentThreadableLoader::reportResponseReceived(unsigned long identifier, const ResourceResponse& response) 646 void DocumentThreadableLoader::reportResponseReceived(unsigned long identifier, const ResourceResponse& response)
642 { 647 {
643 LocalFrame* frame = document().frame(); 648 LocalFrame* frame = document().frame();
644 // We are seeing crashes caused by nullptr (crbug.com/578849). But the frame 649 // We are seeing crashes caused by nullptr (crbug.com/578849). But the frame
645 // must be set here. TODO(horo): Find the root cause of the unset frame. 650 // must be set here. TODO(horo): Find the root cause of the unset frame.
646 ASSERT(frame); 651 DCHECK(frame);
647 if (!frame) 652 if (!frame)
648 return; 653 return;
649 DocumentLoader* loader = frame->loader().documentLoader(); 654 DocumentLoader* loader = frame->loader().documentLoader();
650 TRACE_EVENT_INSTANT1("devtools.timeline", "ResourceReceiveResponse", TRACE_E VENT_SCOPE_THREAD, "data", InspectorReceiveResponseEvent::data(identifier, frame , response)); 655 TRACE_EVENT_INSTANT1("devtools.timeline", "ResourceReceiveResponse", TRACE_E VENT_SCOPE_THREAD, "data", InspectorReceiveResponseEvent::data(identifier, frame , response));
651 InspectorInstrumentation::didReceiveResourceResponse(frame, identifier, load er, response, resource()); 656 InspectorInstrumentation::didReceiveResourceResponse(frame, identifier, load er, response, resource());
652 frame->console().reportResourceResponseReceived(loader, identifier, response ); 657 frame->console().reportResourceResponseReceived(loader, identifier, response );
653 } 658 }
654 659
655 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re sourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 660 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re sourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
656 { 661 {
657 ASSERT(m_client); 662 DCHECK(m_client);
658 663
659 if (!m_actualRequest.isNull()) { 664 if (!m_actualRequest.isNull()) {
660 reportResponseReceived(identifier, response); 665 reportResponseReceived(identifier, response);
661 handlePreflightResponse(response); 666 handlePreflightResponse(response);
662 return; 667 return;
663 } 668 }
664 669
665 if (response.wasFetchedViaServiceWorker()) { 670 if (response.wasFetchedViaServiceWorker()) {
666 if (response.wasFetchedViaForeignFetch()) 671 if (response.wasFetchedViaForeignFetch())
667 UseCounter::count(m_document, UseCounter::ForeignFetchInterception); 672 UseCounter::count(m_document, UseCounter::ForeignFetchInterception);
668 if (response.wasFallbackRequiredByServiceWorker()) { 673 if (response.wasFallbackRequiredByServiceWorker()) {
669 // At this point we must have m_fallbackRequestForServiceWorker. 674 // At this point we must have m_fallbackRequestForServiceWorker.
670 // (For SharedWorker the request won't be CORS or CORS-with-prefligh t, 675 // (For SharedWorker the request won't be CORS or CORS-with-prefligh t,
671 // therefore fallback-to-network is handled in the browser process 676 // therefore fallback-to-network is handled in the browser process
672 // when the ServiceWorker does not call respondWith().) 677 // when the ServiceWorker does not call respondWith().)
673 ASSERT(!m_fallbackRequestForServiceWorker.isNull()); 678 DCHECK(!m_fallbackRequestForServiceWorker.isNull());
674 reportResponseReceived(identifier, response); 679 reportResponseReceived(identifier, response);
675 loadFallbackRequestForServiceWorker(); 680 loadFallbackRequestForServiceWorker();
676 return; 681 return;
677 } 682 }
678 m_fallbackRequestForServiceWorker = ResourceRequest(); 683 m_fallbackRequestForServiceWorker = ResourceRequest();
679 m_client->didReceiveResponse(identifier, response, std::move(handle)); 684 m_client->didReceiveResponse(identifier, response, std::move(handle));
680 return; 685 return;
681 } 686 }
682 687
683 // Even if the request met the conditions to get handled by a Service Worker 688 // Even if the request met the conditions to get handled by a Service Worker
684 // in the constructor of this class (and therefore 689 // in the constructor of this class (and therefore
685 // |m_fallbackRequestForServiceWorker| is set), the Service Worker may skip 690 // |m_fallbackRequestForServiceWorker| is set), the Service Worker may skip
686 // processing the request. Only if the request is same origin, the skipped 691 // processing the request. Only if the request is same origin, the skipped
687 // response may come here (wasFetchedViaServiceWorker() returns false) since 692 // response may come here (wasFetchedViaServiceWorker() returns false) since
688 // such a request doesn't have to go through the CORS algorithm by calling 693 // such a request doesn't have to go through the CORS algorithm by calling
689 // loadFallbackRequestForServiceWorker(). 694 // loadFallbackRequestForServiceWorker().
690 // FIXME: We should use |m_sameOriginRequest| when we will support 695 // FIXME: We should use |m_sameOriginRequest| when we will support
691 // Suborigins (crbug.com/336894) for Service Worker. 696 // Suborigins (crbug.com/336894) for Service Worker.
692 ASSERT(m_fallbackRequestForServiceWorker.isNull() || getSecurityOrigin()->ca nRequest(m_fallbackRequestForServiceWorker.url())); 697 DCHECK(m_fallbackRequestForServiceWorker.isNull() || getSecurityOrigin()->ca nRequest(m_fallbackRequestForServiceWorker.url()));
693 m_fallbackRequestForServiceWorker = ResourceRequest(); 698 m_fallbackRequestForServiceWorker = ResourceRequest();
694 699
695 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC ontrol) { 700 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC ontrol) {
696 String accessControlErrorDescription; 701 String accessControlErrorDescription;
697 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), get SecurityOrigin(), accessControlErrorDescription, m_requestContext)) { 702 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), get SecurityOrigin(), accessControlErrorDescription, m_requestContext)) {
698 reportResponseReceived(identifier, response); 703 reportResponseReceived(identifier, response);
699 704
700 ThreadableLoaderClient* client = m_client; 705 ThreadableLoaderClient* client = m_client;
701 clear(); 706 clear();
702 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInte rnal, 0, response.url().getString(), accessControlErrorDescription)); 707 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInte rnal, 0, response.url().getString(), accessControlErrorDescription));
703 return; 708 return;
704 } 709 }
705 } 710 }
706 711
707 m_client->didReceiveResponse(identifier, response, std::move(handle)); 712 m_client->didReceiveResponse(identifier, response, std::move(handle));
708 } 713 }
709 714
710 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size) 715 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size)
711 { 716 {
712 m_checker.setSerializedCachedMetadata(); 717 m_checker.setSerializedCachedMetadata();
713 718
714 if (!m_actualRequest.isNull()) 719 if (!m_actualRequest.isNull())
715 return; 720 return;
716 m_client->didReceiveCachedMetadata(data, size); 721 m_client->didReceiveCachedMetadata(data, size);
717 } 722 }
718 723
719 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength) 724 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength)
720 { 725 {
721 ASSERT_UNUSED(resource, resource == this->resource()); 726 ALLOW_UNUSED_LOCAL(resource);
yhirano 2016/09/12 04:33:12 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
722 ASSERT(m_async); 727 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
728 DCHECK(m_async);
723 729
724 m_checker.dataReceived(); 730 m_checker.dataReceived();
725 731
726 if (m_isUsingDataConsumerHandle) 732 if (m_isUsingDataConsumerHandle)
727 return; 733 return;
728 734
729 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t. 735 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t.
730 // Until then, we use safeCast to trap potential overflows. 736 // Until then, we use safeCast to trap potential overflows.
731 handleReceivedData(data, safeCast<unsigned>(dataLength)); 737 handleReceivedData(data, safeCast<unsigned>(dataLength));
732 } 738 }
733 739
734 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength) 740 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength)
735 { 741 {
736 ASSERT(m_client); 742 DCHECK(m_client);
737 743
738 // Preflight data should be invisible to clients. 744 // Preflight data should be invisible to clients.
739 if (!m_actualRequest.isNull()) 745 if (!m_actualRequest.isNull())
740 return; 746 return;
741 747
742 ASSERT(m_fallbackRequestForServiceWorker.isNull()); 748 DCHECK(m_fallbackRequestForServiceWorker.isNull());
743 749
744 m_client->didReceiveData(data, dataLength); 750 m_client->didReceiveData(data, dataLength);
745 } 751 }
746 752
747 void DocumentThreadableLoader::notifyFinished(Resource* resource) 753 void DocumentThreadableLoader::notifyFinished(Resource* resource)
748 { 754 {
749 ASSERT(m_client); 755 DCHECK(m_client);
750 ASSERT(resource == this->resource()); 756 DCHECK(resource == this->resource());
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
751 ASSERT(m_async); 757 DCHECK(m_async);
752 758
753 m_checker.notifyFinished(resource); 759 m_checker.notifyFinished(resource);
754 760
755 if (resource->errorOccurred()) { 761 if (resource->errorOccurred()) {
756 handleError(resource->resourceError()); 762 handleError(resource->resourceError());
757 } else { 763 } else {
758 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( )); 764 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( ));
759 } 765 }
760 } 766 }
761 767
762 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime) 768 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime)
763 { 769 {
764 ASSERT(m_fallbackRequestForServiceWorker.isNull()); 770 DCHECK(m_fallbackRequestForServiceWorker.isNull());
765 771
766 if (!m_actualRequest.isNull()) { 772 if (!m_actualRequest.isNull()) {
767 // FIXME: Timeout should be applied to whole fetch, not for each of 773 // FIXME: Timeout should be applied to whole fetch, not for each of
768 // preflight and actual request. 774 // preflight and actual request.
769 m_timeoutTimer.stop(); 775 m_timeoutTimer.stop();
770 ASSERT(!m_sameOriginRequest); 776 DCHECK(!m_sameOriginRequest);
771 ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl); 777 DCHECK(m_options.crossOriginRequestPolicy == UseAccessControl);
yhirano 2016/09/12 04:33:13 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
772 loadActualRequest(); 778 loadActualRequest();
773 return; 779 return;
774 } 780 }
775 781
776 ThreadableLoaderClient* client = m_client; 782 ThreadableLoaderClient* client = m_client;
777 // Protect the resource in |didFinishLoading| in order not to release the 783 // Protect the resource in |didFinishLoading| in order not to release the
778 // downloaded file. 784 // downloaded file.
779 Persistent<Resource> protect = resource(); 785 Persistent<Resource> protect = resource();
780 clear(); 786 clear();
781 client->didFinishLoading(identifier, finishTime); 787 client->didFinishLoading(identifier, finishTime);
782 } 788 }
783 789
784 void DocumentThreadableLoader::didTimeout(TimerBase* timer) 790 void DocumentThreadableLoader::didTimeout(TimerBase* timer)
785 { 791 {
786 ASSERT_UNUSED(timer, timer == &m_timeoutTimer); 792 ALLOW_UNUSED_LOCAL(timer);
yhirano 2016/09/12 04:33:13 ditto as Resource::cancelTimerFired.
hiroshige 2016/09/13 08:43:20 Done.
793 DCHECK(timer == &m_timeoutTimer);
yhirano 2016/09/12 04:33:12 DCHECK_EQ
hiroshige 2016/09/13 08:43:20 Done.
787 794
788 // Using values from net/base/net_error_list.h ERR_TIMED_OUT, 795 // Using values from net/base/net_error_list.h ERR_TIMED_OUT,
789 // Same as existing FIXME above - this error should be coming from FrameLoad erClient to be identifiable. 796 // Same as existing FIXME above - this error should be coming from FrameLoad erClient to be identifiable.
790 static const int timeoutError = -7; 797 static const int timeoutError = -7;
791 ResourceError error("net", timeoutError, resource()->url(), String()); 798 ResourceError error("net", timeoutError, resource()->url(), String());
792 error.setIsTimeout(true); 799 error.setIsTimeout(true);
793 cancelWithError(error); 800 cancelWithError(error);
794 } 801 }
795 802
796 void DocumentThreadableLoader::loadFallbackRequestForServiceWorker() 803 void DocumentThreadableLoader::loadFallbackRequestForServiceWorker()
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 849
843 ThreadableLoaderClient* client = m_client; 850 ThreadableLoaderClient* client = m_client;
844 clear(); 851 clear();
845 client->didFail(copiedError); 852 client->didFail(copiedError);
846 } 853 }
847 854
848 void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou rceLoaderOptions resourceLoaderOptions) 855 void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou rceLoaderOptions resourceLoaderOptions)
849 { 856 {
850 // Any credential should have been removed from the cross-site requests. 857 // Any credential should have been removed from the cross-site requests.
851 const KURL& requestURL = request.url(); 858 const KURL& requestURL = request.url();
852 ASSERT(m_sameOriginRequest || requestURL.user().isEmpty()); 859 DCHECK(m_sameOriginRequest || requestURL.user().isEmpty());
853 ASSERT(m_sameOriginRequest || requestURL.pass().isEmpty()); 860 DCHECK(m_sameOriginRequest || requestURL.pass().isEmpty());
854 861
855 // Update resourceLoaderOptions with enforced values. 862 // Update resourceLoaderOptions with enforced values.
856 if (m_forceDoNotAllowStoredCredentials) 863 if (m_forceDoNotAllowStoredCredentials)
857 resourceLoaderOptions.allowCredentials = DoNotAllowStoredCredentials; 864 resourceLoaderOptions.allowCredentials = DoNotAllowStoredCredentials;
858 resourceLoaderOptions.securityOrigin = m_securityOrigin; 865 resourceLoaderOptions.securityOrigin = m_securityOrigin;
859 if (m_async) { 866 if (m_async) {
860 if (!m_actualRequest.isNull()) 867 if (!m_actualRequest.isNull())
861 resourceLoaderOptions.dataBufferingPolicy = BufferData; 868 resourceLoaderOptions.dataBufferingPolicy = BufferData;
862 869
863 if (m_options.timeoutMilliseconds > 0) 870 if (m_options.timeoutMilliseconds > 0)
864 m_timeoutTimer.startOneShot(m_options.timeoutMilliseconds / 1000.0, BLINK_FROM_HERE); 871 m_timeoutTimer.startOneShot(m_options.timeoutMilliseconds / 1000.0, BLINK_FROM_HERE);
865 872
866 FetchRequest newRequest(request, m_options.initiator, resourceLoaderOpti ons); 873 FetchRequest newRequest(request, m_options.initiator, resourceLoaderOpti ons);
867 if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests) 874 if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests)
868 newRequest.setOriginRestriction(FetchRequest::NoOriginRestriction); 875 newRequest.setOriginRestriction(FetchRequest::NoOriginRestriction);
869 ASSERT(!resource()); 876 DCHECK(!resource());
870 877
871 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr()); 878 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr());
872 879
873 if (request.requestContext() == WebURLRequest::RequestContextVideo || re quest.requestContext() == WebURLRequest::RequestContextAudio) 880 if (request.requestContext() == WebURLRequest::RequestContextVideo || re quest.requestContext() == WebURLRequest::RequestContextAudio)
874 setResource(RawResource::fetchMedia(newRequest, document().fetcher() )); 881 setResource(RawResource::fetchMedia(newRequest, document().fetcher() ));
875 else if (request.requestContext() == WebURLRequest::RequestContextManife st) 882 else if (request.requestContext() == WebURLRequest::RequestContextManife st)
876 setResource(RawResource::fetchManifest(newRequest, document().fetche r())); 883 setResource(RawResource::fetchManifest(newRequest, document().fetche r()));
877 else 884 else
878 setResource(RawResource::fetch(newRequest, document().fetcher())); 885 setResource(RawResource::fetch(newRequest, document().fetcher()));
879 886
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 return m_resourceLoaderOptions.allowCredentials; 981 return m_resourceLoaderOptions.allowCredentials;
975 } 982 }
976 983
977 const SecurityOrigin* DocumentThreadableLoader::getSecurityOrigin() const 984 const SecurityOrigin* DocumentThreadableLoader::getSecurityOrigin() const
978 { 985 {
979 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin(); 986 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin();
980 } 987 }
981 988
982 Document& DocumentThreadableLoader::document() const 989 Document& DocumentThreadableLoader::document() const
983 { 990 {
984 ASSERT(m_document); 991 DCHECK(m_document);
985 return *m_document; 992 return *m_document;
986 } 993 }
987 994
988 DEFINE_TRACE(DocumentThreadableLoader) 995 DEFINE_TRACE(DocumentThreadableLoader)
989 { 996 {
990 visitor->trace(m_resource); 997 visitor->trace(m_resource);
991 visitor->trace(m_document); 998 visitor->trace(m_document);
992 ThreadableLoader::trace(visitor); 999 ThreadableLoader::trace(visitor);
993 RawResourceClient::trace(visitor); 1000 RawResourceClient::trace(visitor);
994 } 1001 }
995 1002
996 } // namespace blink 1003 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698