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

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

Issue 2751143003: Move FrameFetchContext::dispatchDidLoadResourceFromMemoryCache logic into ResourceFetcher (Closed)
Patch Set: addressed comments Created 3 years, 9 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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 redirectResponse, initiatorInfo); 480 redirectResponse, initiatorInfo);
481 if (frame()->frameScheduler()) 481 if (frame()->frameScheduler())
482 frame()->frameScheduler()->didStartLoading(identifier); 482 frame()->frameScheduler()->didStartLoading(identifier);
483 } 483 }
484 484
485 void FrameFetchContext::dispatchDidReceiveResponse( 485 void FrameFetchContext::dispatchDidReceiveResponse(
486 unsigned long identifier, 486 unsigned long identifier,
487 const ResourceResponse& response, 487 const ResourceResponse& response,
488 WebURLRequest::FrameType frameType, 488 WebURLRequest::FrameType frameType,
489 WebURLRequest::RequestContext requestContext, 489 WebURLRequest::RequestContext requestContext,
490 Resource* resource) { 490 Resource* resource,
491 dispatchDidReceiveResponseInternal(identifier, response, frameType, 491 ResourceResponseType responseType) {
492 requestContext, resource, 492 if (responseType == ResourceResponseType::kFromMemoryCache) {
493 LinkLoader::LoadResourcesAndPreconnect); 493 // Note: probe::willSendRequest needs to precede before this probe method.
494 probe::markResourceAsCached(frame(), identifier);
495 if (response.isNull())
496 return;
497 }
498
499 MixedContentChecker::checkMixedPrivatePublic(frame(),
500 response.remoteIPAddress());
501 LinkLoader::CanLoadResources resourceLoadingPolicy =
502 responseType == ResourceResponseType::kFromMemoryCache
503 ? LinkLoader::DoNotLoadResources
504 : LinkLoader::LoadResourcesAndPreconnect;
505 if (m_documentLoader &&
506 m_documentLoader ==
507 m_documentLoader->frame()->loader().provisionalDocumentLoader()) {
508 FrameClientHintsPreferencesContext hintsContext(frame());
509 m_documentLoader->clientHintsPreferences()
510 .updateFromAcceptClientHintsHeader(
511 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext);
512 // When response is received with a provisional docloader, the resource
513 // haven't committed yet, and we cannot load resources, only preconnect.
514 resourceLoadingPolicy = LinkLoader::DoNotLoadResources;
515 }
516 LinkLoader::loadLinksFromHeader(
517 response.httpHeaderField(HTTPNames::Link), response.url(),
518 frame()->document(), NetworkHintsInterfaceImpl(), resourceLoadingPolicy,
519 LinkLoader::LoadAll, nullptr);
520
521 if (response.hasMajorCertificateErrors()) {
522 MixedContentChecker::handleCertificateError(frame(), response, frameType,
523 requestContext);
524 }
525
526 frame()->loader().progress().incrementProgress(identifier, response);
527 localFrameClient()->dispatchDidReceiveResponse(response);
528 DocumentLoader* documentLoader = masterDocumentLoader();
529 probe::didReceiveResourceResponse(frame(), identifier, documentLoader,
530 response, resource);
531 // It is essential that inspector gets resource response BEFORE console.
532 frame()->console().reportResourceResponseReceived(documentLoader, identifier,
533 response);
494 } 534 }
495 535
496 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, 536 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier,
497 const char* data, 537 const char* data,
498 int dataLength) { 538 int dataLength) {
499 frame()->loader().progress().incrementProgress(identifier, dataLength); 539 frame()->loader().progress().incrementProgress(identifier, dataLength);
500 probe::didReceiveData(frame(), identifier, data, dataLength); 540 probe::didReceiveData(frame(), identifier, data, dataLength);
501 } 541 }
502 542
503 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, 543 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier,
(...skipping 29 matching lines...) Expand all
533 // Notification to FrameConsole should come AFTER InspectorInstrumentation 573 // Notification to FrameConsole should come AFTER InspectorInstrumentation
534 // call, DevTools front-end relies on this. 574 // call, DevTools front-end relies on this.
535 if (!isInternalRequest) 575 if (!isInternalRequest)
536 frame()->console().didFailLoading(identifier, error); 576 frame()->console().didFailLoading(identifier, error);
537 if (frame()->frameScheduler()) 577 if (frame()->frameScheduler())
538 frame()->frameScheduler()->didStopLoading(identifier); 578 frame()->frameScheduler()->didStopLoading(identifier);
539 } 579 }
540 580
541 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( 581 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache(
542 unsigned long identifier, 582 unsigned long identifier,
543 Resource* resource, 583 const ResourceRequest& resourceRequest,
544 WebURLRequest::FrameType frameType, 584 const ResourceResponse& resourceResponse) {
545 WebURLRequest::RequestContext requestContext) { 585 localFrameClient()->dispatchDidLoadResourceFromMemoryCache(resourceRequest,
546 ResourceRequest request(resource->url()); 586 resourceResponse);
547 request.setFrameType(frameType);
548 request.setRequestContext(requestContext);
549 localFrameClient()->dispatchDidLoadResourceFromMemoryCache(
550 request, resource->response());
551 dispatchWillSendRequest(identifier, request, ResourceResponse(),
552 resource->options().initiatorInfo);
553 probe::markResourceAsCached(frame(), identifier);
554 if (!resource->response().isNull()) {
555 dispatchDidReceiveResponseInternal(identifier, resource->response(),
556 frameType, requestContext, resource,
557 LinkLoader::DoNotLoadResources);
558 }
559
560 if (resource->encodedSize() > 0)
561 dispatchDidReceiveData(identifier, 0, resource->encodedSize());
562
563 dispatchDidFinishLoading(identifier, 0, 0,
564 resource->response().decodedBodyLength());
565 } 587 }
566 588
567 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const { 589 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const {
568 if (!m_documentLoader) 590 if (!m_documentLoader)
569 return true; 591 return true;
570 592
571 FrameLoader& loader = m_documentLoader->frame()->loader(); 593 FrameLoader& loader = m_documentLoader->frame()->loader();
572 if (type == Resource::MainResource) 594 if (type == Resource::MainResource)
573 return m_documentLoader == loader.provisionalDocumentLoader(); 595 return m_documentLoader == loader.provisionalDocumentLoader();
574 return m_documentLoader == loader.documentLoader(); 596 return m_documentLoader == loader.documentLoader();
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame()) 1049 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame())
1028 return ResourceLoadPriorityVeryLow; 1050 return ResourceLoadPriorityVeryLow;
1029 1051
1030 return priority; 1052 return priority;
1031 } 1053 }
1032 1054
1033 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { 1055 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const {
1034 return frame()->frameScheduler()->loadingTaskRunner(); 1056 return frame()->frameScheduler()->loadingTaskRunner();
1035 } 1057 }
1036 1058
1037 void FrameFetchContext::dispatchDidReceiveResponseInternal(
1038 unsigned long identifier,
1039 const ResourceResponse& response,
1040 WebURLRequest::FrameType frameType,
1041 WebURLRequest::RequestContext requestContext,
1042 Resource* resource,
1043 LinkLoader::CanLoadResources resourceLoadingPolicy) {
1044 MixedContentChecker::checkMixedPrivatePublic(frame(),
1045 response.remoteIPAddress());
1046 if (m_documentLoader &&
1047 m_documentLoader ==
1048 m_documentLoader->frame()->loader().provisionalDocumentLoader()) {
1049 FrameClientHintsPreferencesContext hintsContext(frame());
1050 m_documentLoader->clientHintsPreferences()
1051 .updateFromAcceptClientHintsHeader(
1052 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext);
1053 // When response is received with a provisional docloader, the resource
1054 // haven't committed yet, and we cannot load resources, only preconnect.
1055 resourceLoadingPolicy = LinkLoader::DoNotLoadResources;
1056 }
1057 LinkLoader::loadLinksFromHeader(
1058 response.httpHeaderField(HTTPNames::Link), response.url(),
1059 frame()->document(), NetworkHintsInterfaceImpl(), resourceLoadingPolicy,
1060 LinkLoader::LoadAll, nullptr);
1061
1062 if (response.hasMajorCertificateErrors()) {
1063 MixedContentChecker::handleCertificateError(frame(), response, frameType,
1064 requestContext);
1065 }
1066
1067 frame()->loader().progress().incrementProgress(identifier, response);
1068 localFrameClient()->dispatchDidReceiveResponse(response);
1069 DocumentLoader* documentLoader = masterDocumentLoader();
1070 probe::didReceiveResourceResponse(frame(), identifier, documentLoader,
1071 response, resource);
1072 // It is essential that inspector gets resource response BEFORE console.
1073 frame()->console().reportResourceResponseReceived(documentLoader, identifier,
1074 response);
1075 }
1076
1077 DEFINE_TRACE(FrameFetchContext) { 1059 DEFINE_TRACE(FrameFetchContext) {
1078 visitor->trace(m_document); 1060 visitor->trace(m_document);
1079 visitor->trace(m_documentLoader); 1061 visitor->trace(m_documentLoader);
1080 FetchContext::trace(visitor); 1062 FetchContext::trace(visitor);
1081 } 1063 }
1082 1064
1083 } // namespace blink 1065 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698