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

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: Rebase. 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 DCHECK_EQ(resource, this->resource());
422 ASSERT(m_async); 422 DCHECK(m_async);
423 423
424 m_checker.redirectReceived(); 424 m_checker.redirectReceived();
425 425
426 if (!m_actualRequest.isNull()) { 426 if (!m_actualRequest.isNull()) {
427 reportResponseReceived(resource->identifier(), redirectResponse); 427 reportResponseReceived(resource->identifier(), redirectResponse);
428 428
429 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)"); 429 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)");
430 430
431 request = ResourceRequest(); 431 request = ResourceRequest();
432 432
433 return; 433 return;
434 } 434 }
435 435
436 if (m_redirectMode == WebURLRequest::FetchRedirectModeManual) { 436 if (m_redirectMode == WebURLRequest::FetchRedirectModeManual) {
437 // Keep |this| alive even if the client release a reference in 437 // Keep |this| alive even if the client release a reference in
438 // responseReceived(). 438 // responseReceived().
439 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr()); 439 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr());
440 440
441 // We use |m_redirectMode| to check the original redirect mode. 441 // 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 442 // |request| is a new request for redirect. So we don't set the redirect
443 // mode of it in WebURLLoaderImpl::Context::OnReceivedRedirect(). 443 // mode of it in WebURLLoaderImpl::Context::OnReceivedRedirect().
444 ASSERT(request.useStreamOnResponse()); 444 DCHECK(request.useStreamOnResponse());
445 // There is no need to read the body of redirect response because there 445 // 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 446 // is no way to read the body of opaque-redirect filtered response's
447 // internal response. 447 // internal response.
448 // TODO(horo): If we support any API which expose the internal body, we 448 // 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 449 // will have to read the body. And also HTTPCache changes will be needed
450 // because it doesn't store the body of redirect responses. 450 // because it doesn't store the body of redirect responses.
451 responseReceived(resource, redirectResponse, wrapUnique(new EmptyDataHan dle())); 451 responseReceived(resource, redirectResponse, wrapUnique(new EmptyDataHan dle()));
452 452
453 if (!self) { 453 if (!self) {
454 request = ResourceRequest(); 454 request = ResourceRequest();
455 return; 455 return;
456 } 456 }
457 457
458 if (m_client) { 458 if (m_client) {
459 ASSERT(m_actualRequest.isNull()); 459 DCHECK(m_actualRequest.isNull());
460 notifyFinished(resource); 460 notifyFinished(resource);
461 } 461 }
462 462
463 request = ResourceRequest(); 463 request = ResourceRequest();
464 464
465 return; 465 return;
466 } 466 }
467 467
468 if (m_redirectMode == WebURLRequest::FetchRedirectModeError) { 468 if (m_redirectMode == WebURLRequest::FetchRedirectModeError) {
469 ThreadableLoaderClient* client = m_client; 469 ThreadableLoaderClient* client = m_client;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 m_checker.redirectBlocked(); 560 m_checker.redirectBlocked();
561 561
562 // Tells the client that a redirect was received but not followed (for an un known reason). 562 // Tells the client that a redirect was received but not followed (for an un known reason).
563 ThreadableLoaderClient* client = m_client; 563 ThreadableLoaderClient* client = m_client;
564 clear(); 564 clear();
565 client->didFailRedirectCheck(); 565 client->didFailRedirectCheck();
566 } 566 }
567 567
568 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent) 568 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent)
569 { 569 {
570 ASSERT(m_client); 570 DCHECK(m_client);
571 ASSERT_UNUSED(resource, resource == this->resource()); 571 DCHECK_EQ(resource, this->resource());
572 ASSERT(m_async); 572 DCHECK(m_async);
573 573
574 m_checker.dataSent(); 574 m_checker.dataSent();
575 m_client->didSendData(bytesSent, totalBytesToBeSent); 575 m_client->didSendData(bytesSent, totalBytesToBeSent);
576 } 576 }
577 577
578 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength ) 578 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength )
579 { 579 {
580 ASSERT(m_client); 580 DCHECK(m_client);
581 ASSERT_UNUSED(resource, resource == this->resource()); 581 DCHECK_EQ(resource, this->resource());
582 ASSERT(m_actualRequest.isNull()); 582 DCHECK(m_actualRequest.isNull());
583 ASSERT(m_async); 583 DCHECK(m_async);
584 584
585 m_checker.dataDownloaded(); 585 m_checker.dataDownloaded();
586 m_client->didDownloadData(dataLength); 586 m_client->didDownloadData(dataLength);
587 } 587 }
588 588
589 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info) 589 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info)
590 { 590 {
591 ASSERT(m_client); 591 DCHECK(m_client);
592 ASSERT_UNUSED(resource, resource == this->resource()); 592 DCHECK_EQ(resource, this->resource());
593 ASSERT(m_async); 593 DCHECK(m_async);
594 594
595 m_client->didReceiveResourceTiming(info); 595 m_client->didReceiveResourceTiming(info);
596 } 596 }
597 597
598 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 598 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
599 { 599 {
600 ASSERT_UNUSED(resource, resource == this->resource()); 600 DCHECK_EQ(resource, this->resource());
601 ASSERT(m_async); 601 DCHECK(m_async);
602 602
603 m_checker.responseReceived(); 603 m_checker.responseReceived();
604 604
605 if (handle) 605 if (handle)
606 m_isUsingDataConsumerHandle = true; 606 m_isUsingDataConsumerHandle = true;
607 607
608 handleResponse(resource->identifier(), response, std::move(handle)); 608 handleResponse(resource->identifier(), response, std::move(handle));
609 } 609 }
610 610
611 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse) 611 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse)
(...skipping 24 matching lines...) Expand all
636 } 636 }
637 637
638 CrossOriginPreflightResultCache::shared().appendEntry(getSecurityOrigin()->t oString(), m_actualRequest.url(), std::move(preflightResult)); 638 CrossOriginPreflightResultCache::shared().appendEntry(getSecurityOrigin()->t oString(), m_actualRequest.url(), std::move(preflightResult));
639 } 639 }
640 640
641 void DocumentThreadableLoader::reportResponseReceived(unsigned long identifier, const ResourceResponse& response) 641 void DocumentThreadableLoader::reportResponseReceived(unsigned long identifier, const ResourceResponse& response)
642 { 642 {
643 LocalFrame* frame = document().frame(); 643 LocalFrame* frame = document().frame();
644 // We are seeing crashes caused by nullptr (crbug.com/578849). But the frame 644 // 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. 645 // must be set here. TODO(horo): Find the root cause of the unset frame.
646 ASSERT(frame); 646 DCHECK(frame);
647 if (!frame) 647 if (!frame)
648 return; 648 return;
649 DocumentLoader* loader = frame->loader().documentLoader(); 649 DocumentLoader* loader = frame->loader().documentLoader();
650 TRACE_EVENT_INSTANT1("devtools.timeline", "ResourceReceiveResponse", TRACE_E VENT_SCOPE_THREAD, "data", InspectorReceiveResponseEvent::data(identifier, frame , response)); 650 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()); 651 InspectorInstrumentation::didReceiveResourceResponse(frame, identifier, load er, response, resource());
652 frame->console().reportResourceResponseReceived(loader, identifier, response ); 652 frame->console().reportResourceResponseReceived(loader, identifier, response );
653 } 653 }
654 654
655 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re sourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) 655 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re sourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
656 { 656 {
657 ASSERT(m_client); 657 DCHECK(m_client);
658 658
659 if (!m_actualRequest.isNull()) { 659 if (!m_actualRequest.isNull()) {
660 reportResponseReceived(identifier, response); 660 reportResponseReceived(identifier, response);
661 handlePreflightResponse(response); 661 handlePreflightResponse(response);
662 return; 662 return;
663 } 663 }
664 664
665 if (response.wasFetchedViaServiceWorker()) { 665 if (response.wasFetchedViaServiceWorker()) {
666 if (response.wasFetchedViaForeignFetch()) 666 if (response.wasFetchedViaForeignFetch())
667 UseCounter::count(m_document, UseCounter::ForeignFetchInterception); 667 UseCounter::count(m_document, UseCounter::ForeignFetchInterception);
668 if (response.wasFallbackRequiredByServiceWorker()) { 668 if (response.wasFallbackRequiredByServiceWorker()) {
669 // At this point we must have m_fallbackRequestForServiceWorker. 669 // At this point we must have m_fallbackRequestForServiceWorker.
670 // (For SharedWorker the request won't be CORS or CORS-with-prefligh t, 670 // (For SharedWorker the request won't be CORS or CORS-with-prefligh t,
671 // therefore fallback-to-network is handled in the browser process 671 // therefore fallback-to-network is handled in the browser process
672 // when the ServiceWorker does not call respondWith().) 672 // when the ServiceWorker does not call respondWith().)
673 ASSERT(!m_fallbackRequestForServiceWorker.isNull()); 673 DCHECK(!m_fallbackRequestForServiceWorker.isNull());
674 reportResponseReceived(identifier, response); 674 reportResponseReceived(identifier, response);
675 loadFallbackRequestForServiceWorker(); 675 loadFallbackRequestForServiceWorker();
676 return; 676 return;
677 } 677 }
678 m_fallbackRequestForServiceWorker = ResourceRequest(); 678 m_fallbackRequestForServiceWorker = ResourceRequest();
679 m_client->didReceiveResponse(identifier, response, std::move(handle)); 679 m_client->didReceiveResponse(identifier, response, std::move(handle));
680 return; 680 return;
681 } 681 }
682 682
683 // Even if the request met the conditions to get handled by a Service Worker 683 // Even if the request met the conditions to get handled by a Service Worker
684 // in the constructor of this class (and therefore 684 // in the constructor of this class (and therefore
685 // |m_fallbackRequestForServiceWorker| is set), the Service Worker may skip 685 // |m_fallbackRequestForServiceWorker| is set), the Service Worker may skip
686 // processing the request. Only if the request is same origin, the skipped 686 // processing the request. Only if the request is same origin, the skipped
687 // response may come here (wasFetchedViaServiceWorker() returns false) since 687 // response may come here (wasFetchedViaServiceWorker() returns false) since
688 // such a request doesn't have to go through the CORS algorithm by calling 688 // such a request doesn't have to go through the CORS algorithm by calling
689 // loadFallbackRequestForServiceWorker(). 689 // loadFallbackRequestForServiceWorker().
690 // FIXME: We should use |m_sameOriginRequest| when we will support 690 // FIXME: We should use |m_sameOriginRequest| when we will support
691 // Suborigins (crbug.com/336894) for Service Worker. 691 // Suborigins (crbug.com/336894) for Service Worker.
692 ASSERT(m_fallbackRequestForServiceWorker.isNull() || getSecurityOrigin()->ca nRequest(m_fallbackRequestForServiceWorker.url())); 692 DCHECK(m_fallbackRequestForServiceWorker.isNull() || getSecurityOrigin()->ca nRequest(m_fallbackRequestForServiceWorker.url()));
693 m_fallbackRequestForServiceWorker = ResourceRequest(); 693 m_fallbackRequestForServiceWorker = ResourceRequest();
694 694
695 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC ontrol) { 695 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC ontrol) {
696 String accessControlErrorDescription; 696 String accessControlErrorDescription;
697 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), get SecurityOrigin(), accessControlErrorDescription, m_requestContext)) { 697 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), get SecurityOrigin(), accessControlErrorDescription, m_requestContext)) {
698 reportResponseReceived(identifier, response); 698 reportResponseReceived(identifier, response);
699 699
700 ThreadableLoaderClient* client = m_client; 700 ThreadableLoaderClient* client = m_client;
701 clear(); 701 clear();
702 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInte rnal, 0, response.url().getString(), accessControlErrorDescription)); 702 client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInte rnal, 0, response.url().getString(), accessControlErrorDescription));
703 return; 703 return;
704 } 704 }
705 } 705 }
706 706
707 m_client->didReceiveResponse(identifier, response, std::move(handle)); 707 m_client->didReceiveResponse(identifier, response, std::move(handle));
708 } 708 }
709 709
710 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size) 710 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size)
711 { 711 {
712 m_checker.setSerializedCachedMetadata(); 712 m_checker.setSerializedCachedMetadata();
713 713
714 if (!m_actualRequest.isNull()) 714 if (!m_actualRequest.isNull())
715 return; 715 return;
716 m_client->didReceiveCachedMetadata(data, size); 716 m_client->didReceiveCachedMetadata(data, size);
717 } 717 }
718 718
719 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength) 719 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength)
720 { 720 {
721 ASSERT_UNUSED(resource, resource == this->resource()); 721 DCHECK_EQ(resource, this->resource());
722 ASSERT(m_async); 722 DCHECK(m_async);
723 723
724 m_checker.dataReceived(); 724 m_checker.dataReceived();
725 725
726 if (m_isUsingDataConsumerHandle) 726 if (m_isUsingDataConsumerHandle)
727 return; 727 return;
728 728
729 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t. 729 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t.
730 // Until then, we use safeCast to trap potential overflows. 730 // Until then, we use safeCast to trap potential overflows.
731 handleReceivedData(data, safeCast<unsigned>(dataLength)); 731 handleReceivedData(data, safeCast<unsigned>(dataLength));
732 } 732 }
733 733
734 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength) 734 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength)
735 { 735 {
736 ASSERT(m_client); 736 DCHECK(m_client);
737 737
738 // Preflight data should be invisible to clients. 738 // Preflight data should be invisible to clients.
739 if (!m_actualRequest.isNull()) 739 if (!m_actualRequest.isNull())
740 return; 740 return;
741 741
742 ASSERT(m_fallbackRequestForServiceWorker.isNull()); 742 DCHECK(m_fallbackRequestForServiceWorker.isNull());
743 743
744 m_client->didReceiveData(data, dataLength); 744 m_client->didReceiveData(data, dataLength);
745 } 745 }
746 746
747 void DocumentThreadableLoader::notifyFinished(Resource* resource) 747 void DocumentThreadableLoader::notifyFinished(Resource* resource)
748 { 748 {
749 ASSERT(m_client); 749 DCHECK(m_client);
750 ASSERT(resource == this->resource()); 750 DCHECK_EQ(resource, this->resource());
751 ASSERT(m_async); 751 DCHECK(m_async);
752 752
753 m_checker.notifyFinished(resource); 753 m_checker.notifyFinished(resource);
754 754
755 if (resource->errorOccurred()) { 755 if (resource->errorOccurred()) {
756 handleError(resource->resourceError()); 756 handleError(resource->resourceError());
757 } else { 757 } else {
758 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( )); 758 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( ));
759 } 759 }
760 } 760 }
761 761
762 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime) 762 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime)
763 { 763 {
764 ASSERT(m_fallbackRequestForServiceWorker.isNull()); 764 DCHECK(m_fallbackRequestForServiceWorker.isNull());
765 765
766 if (!m_actualRequest.isNull()) { 766 if (!m_actualRequest.isNull()) {
767 // FIXME: Timeout should be applied to whole fetch, not for each of 767 // FIXME: Timeout should be applied to whole fetch, not for each of
768 // preflight and actual request. 768 // preflight and actual request.
769 m_timeoutTimer.stop(); 769 m_timeoutTimer.stop();
770 ASSERT(!m_sameOriginRequest); 770 DCHECK(!m_sameOriginRequest);
771 ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl); 771 DCHECK_EQ(m_options.crossOriginRequestPolicy, UseAccessControl);
772 loadActualRequest(); 772 loadActualRequest();
773 return; 773 return;
774 } 774 }
775 775
776 ThreadableLoaderClient* client = m_client; 776 ThreadableLoaderClient* client = m_client;
777 // Protect the resource in |didFinishLoading| in order not to release the 777 // Protect the resource in |didFinishLoading| in order not to release the
778 // downloaded file. 778 // downloaded file.
779 Persistent<Resource> protect = resource(); 779 Persistent<Resource> protect = resource();
780 clear(); 780 clear();
781 client->didFinishLoading(identifier, finishTime); 781 client->didFinishLoading(identifier, finishTime);
782 } 782 }
783 783
784 void DocumentThreadableLoader::didTimeout(TimerBase* timer) 784 void DocumentThreadableLoader::didTimeout(TimerBase* timer)
785 { 785 {
786 ASSERT_UNUSED(timer, timer == &m_timeoutTimer); 786 DCHECK_EQ(timer, &m_timeoutTimer);
787 787
788 // Using values from net/base/net_error_list.h ERR_TIMED_OUT, 788 // 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. 789 // Same as existing FIXME above - this error should be coming from FrameLoad erClient to be identifiable.
790 static const int timeoutError = -7; 790 static const int timeoutError = -7;
791 ResourceError error("net", timeoutError, resource()->url(), String()); 791 ResourceError error("net", timeoutError, resource()->url(), String());
792 error.setIsTimeout(true); 792 error.setIsTimeout(true);
793 cancelWithError(error); 793 cancelWithError(error);
794 } 794 }
795 795
796 void DocumentThreadableLoader::loadFallbackRequestForServiceWorker() 796 void DocumentThreadableLoader::loadFallbackRequestForServiceWorker()
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 842
843 ThreadableLoaderClient* client = m_client; 843 ThreadableLoaderClient* client = m_client;
844 clear(); 844 clear();
845 client->didFail(copiedError); 845 client->didFail(copiedError);
846 } 846 }
847 847
848 void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou rceLoaderOptions resourceLoaderOptions) 848 void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou rceLoaderOptions resourceLoaderOptions)
849 { 849 {
850 // Any credential should have been removed from the cross-site requests. 850 // Any credential should have been removed from the cross-site requests.
851 const KURL& requestURL = request.url(); 851 const KURL& requestURL = request.url();
852 ASSERT(m_sameOriginRequest || requestURL.user().isEmpty()); 852 DCHECK(m_sameOriginRequest || requestURL.user().isEmpty());
853 ASSERT(m_sameOriginRequest || requestURL.pass().isEmpty()); 853 DCHECK(m_sameOriginRequest || requestURL.pass().isEmpty());
854 854
855 // Update resourceLoaderOptions with enforced values. 855 // Update resourceLoaderOptions with enforced values.
856 if (m_forceDoNotAllowStoredCredentials) 856 if (m_forceDoNotAllowStoredCredentials)
857 resourceLoaderOptions.allowCredentials = DoNotAllowStoredCredentials; 857 resourceLoaderOptions.allowCredentials = DoNotAllowStoredCredentials;
858 resourceLoaderOptions.securityOrigin = m_securityOrigin; 858 resourceLoaderOptions.securityOrigin = m_securityOrigin;
859 if (m_async) { 859 if (m_async) {
860 if (!m_actualRequest.isNull()) 860 if (!m_actualRequest.isNull())
861 resourceLoaderOptions.dataBufferingPolicy = BufferData; 861 resourceLoaderOptions.dataBufferingPolicy = BufferData;
862 862
863 if (m_options.timeoutMilliseconds > 0) 863 if (m_options.timeoutMilliseconds > 0)
864 m_timeoutTimer.startOneShot(m_options.timeoutMilliseconds / 1000.0, BLINK_FROM_HERE); 864 m_timeoutTimer.startOneShot(m_options.timeoutMilliseconds / 1000.0, BLINK_FROM_HERE);
865 865
866 FetchRequest newRequest(request, m_options.initiator, resourceLoaderOpti ons); 866 FetchRequest newRequest(request, m_options.initiator, resourceLoaderOpti ons);
867 if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests) 867 if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests)
868 newRequest.setOriginRestriction(FetchRequest::NoOriginRestriction); 868 newRequest.setOriginRestriction(FetchRequest::NoOriginRestriction);
869 ASSERT(!resource()); 869 DCHECK(!resource());
870 870
871 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr()); 871 WeakPtr<DocumentThreadableLoader> self(m_weakFactory.createWeakPtr());
872 872
873 if (request.requestContext() == WebURLRequest::RequestContextVideo || re quest.requestContext() == WebURLRequest::RequestContextAudio) 873 if (request.requestContext() == WebURLRequest::RequestContextVideo || re quest.requestContext() == WebURLRequest::RequestContextAudio)
874 setResource(RawResource::fetchMedia(newRequest, document().fetcher() )); 874 setResource(RawResource::fetchMedia(newRequest, document().fetcher() ));
875 else if (request.requestContext() == WebURLRequest::RequestContextManife st) 875 else if (request.requestContext() == WebURLRequest::RequestContextManife st)
876 setResource(RawResource::fetchManifest(newRequest, document().fetche r())); 876 setResource(RawResource::fetchManifest(newRequest, document().fetche r()));
877 else 877 else
878 setResource(RawResource::fetch(newRequest, document().fetcher())); 878 setResource(RawResource::fetch(newRequest, document().fetcher()));
879 879
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 return m_resourceLoaderOptions.allowCredentials; 974 return m_resourceLoaderOptions.allowCredentials;
975 } 975 }
976 976
977 const SecurityOrigin* DocumentThreadableLoader::getSecurityOrigin() const 977 const SecurityOrigin* DocumentThreadableLoader::getSecurityOrigin() const
978 { 978 {
979 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin(); 979 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin();
980 } 980 }
981 981
982 Document& DocumentThreadableLoader::document() const 982 Document& DocumentThreadableLoader::document() const
983 { 983 {
984 ASSERT(m_document); 984 DCHECK(m_document);
985 return *m_document; 985 return *m_document;
986 } 986 }
987 987
988 DEFINE_TRACE(DocumentThreadableLoader) 988 DEFINE_TRACE(DocumentThreadableLoader)
989 { 989 {
990 visitor->trace(m_resource); 990 visitor->trace(m_resource);
991 visitor->trace(m_document); 991 visitor->trace(m_document);
992 ThreadableLoader::trace(visitor); 992 ThreadableLoader::trace(visitor);
993 RawResourceClient::trace(visitor); 993 RawResourceClient::trace(visitor);
994 } 994 }
995 995
996 } // namespace blink 996 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/DocumentLoader.cpp ('k') | third_party/WebKit/Source/core/loader/DocumentWriter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698