Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 redirectResponse, initiatorInfo); | 451 redirectResponse, initiatorInfo); |
| 452 if (frame()->frameScheduler()) | 452 if (frame()->frameScheduler()) |
| 453 frame()->frameScheduler()->didStartLoading(identifier); | 453 frame()->frameScheduler()->didStartLoading(identifier); |
| 454 } | 454 } |
| 455 | 455 |
| 456 void FrameFetchContext::dispatchDidReceiveResponse( | 456 void FrameFetchContext::dispatchDidReceiveResponse( |
| 457 unsigned long identifier, | 457 unsigned long identifier, |
| 458 const ResourceResponse& response, | 458 const ResourceResponse& response, |
| 459 WebURLRequest::FrameType frameType, | 459 WebURLRequest::FrameType frameType, |
| 460 WebURLRequest::RequestContext requestContext, | 460 WebURLRequest::RequestContext requestContext, |
| 461 Resource* resource) { | 461 Resource* resource, |
| 462 dispatchDidReceiveResponseInternal(identifier, response, frameType, | 462 ResourceLoadStartType startType) { |
| 463 requestContext, resource, | 463 if (startType == ResourceLoadStartType::kFromMemoryCache) { |
| 464 LinkLoader::LoadResourcesAndPreconnect); | 464 probe::markResourceAsCached(frame(), identifier); |
|
Nate Chapin
2017/03/22 19:02:02
Is it important to do this after dispatchDidLoadRe
kinuko
2017/03/24 13:51:51
I tried it in my initial patch, but if we reverse
| |
| 465 if (response.isNull()) | |
| 466 return; | |
| 467 } | |
| 468 | |
|
kinuko
2017/03/22 14:13:26
Code below is basically same as what dispatchDidRe
| |
| 469 MixedContentChecker::checkMixedPrivatePublic(frame(), | |
| 470 response.remoteIPAddress()); | |
| 471 LinkLoader::CanLoadResources resourceLoadingPolicy = | |
| 472 startType == ResourceLoadStartType::kFromMemoryCache | |
| 473 ? LinkLoader::DoNotLoadResources | |
| 474 : LinkLoader::LoadResourcesAndPreconnect; | |
| 475 if (m_documentLoader && | |
| 476 m_documentLoader == | |
| 477 m_documentLoader->frame()->loader().provisionalDocumentLoader()) { | |
| 478 FrameClientHintsPreferencesContext hintsContext(frame()); | |
| 479 m_documentLoader->clientHintsPreferences() | |
| 480 .updateFromAcceptClientHintsHeader( | |
| 481 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext); | |
| 482 // When response is received with a provisional docloader, the resource | |
| 483 // haven't committed yet, and we cannot load resources, only preconnect. | |
| 484 resourceLoadingPolicy = LinkLoader::DoNotLoadResources; | |
| 485 } | |
| 486 LinkLoader::loadLinksFromHeader( | |
| 487 response.httpHeaderField(HTTPNames::Link), response.url(), | |
| 488 frame()->document(), NetworkHintsInterfaceImpl(), resourceLoadingPolicy, | |
| 489 LinkLoader::LoadAll, nullptr); | |
| 490 | |
| 491 if (response.hasMajorCertificateErrors()) { | |
| 492 MixedContentChecker::handleCertificateError(frame(), response, frameType, | |
| 493 requestContext); | |
| 494 } | |
| 495 | |
| 496 frame()->loader().progress().incrementProgress(identifier, response); | |
| 497 localFrameClient()->dispatchDidReceiveResponse(response); | |
| 498 DocumentLoader* documentLoader = masterDocumentLoader(); | |
| 499 probe::didReceiveResourceResponse(frame(), identifier, documentLoader, | |
| 500 response, resource); | |
| 501 // It is essential that inspector gets resource response BEFORE console. | |
| 502 frame()->console().reportResourceResponseReceived(documentLoader, identifier, | |
| 503 response); | |
| 465 } | 504 } |
| 466 | 505 |
| 467 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, | 506 void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, |
| 468 const char* data, | 507 const char* data, |
| 469 int dataLength) { | 508 int dataLength) { |
| 470 frame()->loader().progress().incrementProgress(identifier, dataLength); | 509 frame()->loader().progress().incrementProgress(identifier, dataLength); |
| 471 probe::didReceiveData(frame(), identifier, data, dataLength); | 510 probe::didReceiveData(frame(), identifier, data, dataLength); |
| 472 } | 511 } |
| 473 | 512 |
| 474 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, | 513 void FrameFetchContext::dispatchDidReceiveEncodedData(unsigned long identifier, |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 504 // Notification to FrameConsole should come AFTER InspectorInstrumentation | 543 // Notification to FrameConsole should come AFTER InspectorInstrumentation |
| 505 // call, DevTools front-end relies on this. | 544 // call, DevTools front-end relies on this. |
| 506 if (!isInternalRequest) | 545 if (!isInternalRequest) |
| 507 frame()->console().didFailLoading(identifier, error); | 546 frame()->console().didFailLoading(identifier, error); |
| 508 if (frame()->frameScheduler()) | 547 if (frame()->frameScheduler()) |
| 509 frame()->frameScheduler()->didStopLoading(identifier); | 548 frame()->frameScheduler()->didStopLoading(identifier); |
| 510 } | 549 } |
| 511 | 550 |
| 512 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( | 551 void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( |
| 513 unsigned long identifier, | 552 unsigned long identifier, |
| 514 Resource* resource, | 553 const ResourceRequest& resourceRequest, |
| 515 WebURLRequest::FrameType frameType, | 554 const ResourceResponse& resourceResponse) { |
| 516 WebURLRequest::RequestContext requestContext) { | 555 localFrameClient()->dispatchDidLoadResourceFromMemoryCache(resourceRequest, |
| 517 ResourceRequest request(resource->url()); | 556 resourceResponse); |
|
kinuko
2017/03/22 14:13:26
Moved most of the code in this method out of Fetch
| |
| 518 request.setFrameType(frameType); | |
| 519 request.setRequestContext(requestContext); | |
| 520 localFrameClient()->dispatchDidLoadResourceFromMemoryCache( | |
| 521 request, resource->response()); | |
| 522 dispatchWillSendRequest(identifier, request, ResourceResponse(), | |
| 523 resource->options().initiatorInfo); | |
| 524 probe::markResourceAsCached(frame(), identifier); | |
| 525 if (!resource->response().isNull()) { | |
| 526 dispatchDidReceiveResponseInternal(identifier, resource->response(), | |
| 527 frameType, requestContext, resource, | |
| 528 LinkLoader::DoNotLoadResources); | |
| 529 } | |
| 530 | |
| 531 if (resource->encodedSize() > 0) | |
| 532 dispatchDidReceiveData(identifier, 0, resource->encodedSize()); | |
| 533 | |
| 534 dispatchDidFinishLoading(identifier, 0, 0, | |
| 535 resource->response().decodedBodyLength()); | |
| 536 } | 557 } |
| 537 | 558 |
| 538 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const { | 559 bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const { |
| 539 if (!m_documentLoader) | 560 if (!m_documentLoader) |
| 540 return true; | 561 return true; |
| 541 | 562 |
| 542 FrameLoader& loader = m_documentLoader->frame()->loader(); | 563 FrameLoader& loader = m_documentLoader->frame()->loader(); |
| 543 if (type == Resource::MainResource) | 564 if (type == Resource::MainResource) |
| 544 return m_documentLoader == loader.provisionalDocumentLoader(); | 565 return m_documentLoader == loader.provisionalDocumentLoader(); |
| 545 return m_documentLoader == loader.documentLoader(); | 566 return m_documentLoader == loader.documentLoader(); |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1010 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame()) | 1031 if (frame()->settings()->getLowPriorityIframes() && !frame()->isMainFrame()) |
| 1011 return ResourceLoadPriorityVeryLow; | 1032 return ResourceLoadPriorityVeryLow; |
| 1012 | 1033 |
| 1013 return priority; | 1034 return priority; |
| 1014 } | 1035 } |
| 1015 | 1036 |
| 1016 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { | 1037 RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { |
| 1017 return frame()->frameScheduler()->loadingTaskRunner(); | 1038 return frame()->frameScheduler()->loadingTaskRunner(); |
| 1018 } | 1039 } |
| 1019 | 1040 |
| 1020 void FrameFetchContext::dispatchDidReceiveResponseInternal( | |
| 1021 unsigned long identifier, | |
| 1022 const ResourceResponse& response, | |
| 1023 WebURLRequest::FrameType frameType, | |
| 1024 WebURLRequest::RequestContext requestContext, | |
| 1025 Resource* resource, | |
| 1026 LinkLoader::CanLoadResources resourceLoadingPolicy) { | |
| 1027 MixedContentChecker::checkMixedPrivatePublic(frame(), | |
| 1028 response.remoteIPAddress()); | |
| 1029 if (m_documentLoader && | |
| 1030 m_documentLoader == | |
| 1031 m_documentLoader->frame()->loader().provisionalDocumentLoader()) { | |
| 1032 FrameClientHintsPreferencesContext hintsContext(frame()); | |
| 1033 m_documentLoader->clientHintsPreferences() | |
| 1034 .updateFromAcceptClientHintsHeader( | |
| 1035 response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext); | |
| 1036 // When response is received with a provisional docloader, the resource | |
| 1037 // haven't committed yet, and we cannot load resources, only preconnect. | |
| 1038 resourceLoadingPolicy = LinkLoader::DoNotLoadResources; | |
| 1039 } | |
| 1040 LinkLoader::loadLinksFromHeader( | |
| 1041 response.httpHeaderField(HTTPNames::Link), response.url(), | |
| 1042 frame()->document(), NetworkHintsInterfaceImpl(), resourceLoadingPolicy, | |
| 1043 LinkLoader::LoadAll, nullptr); | |
| 1044 | |
| 1045 if (response.hasMajorCertificateErrors()) { | |
| 1046 MixedContentChecker::handleCertificateError(frame(), response, frameType, | |
| 1047 requestContext); | |
| 1048 } | |
| 1049 | |
| 1050 frame()->loader().progress().incrementProgress(identifier, response); | |
| 1051 localFrameClient()->dispatchDidReceiveResponse(response); | |
| 1052 DocumentLoader* documentLoader = masterDocumentLoader(); | |
| 1053 probe::didReceiveResourceResponse(frame(), identifier, documentLoader, | |
| 1054 response, resource); | |
| 1055 // It is essential that inspector gets resource response BEFORE console. | |
| 1056 frame()->console().reportResourceResponseReceived(documentLoader, identifier, | |
| 1057 response); | |
| 1058 } | |
| 1059 | |
| 1060 DEFINE_TRACE(FrameFetchContext) { | 1041 DEFINE_TRACE(FrameFetchContext) { |
| 1061 visitor->trace(m_document); | 1042 visitor->trace(m_document); |
| 1062 visitor->trace(m_documentLoader); | 1043 visitor->trace(m_documentLoader); |
| 1063 FetchContext::trace(visitor); | 1044 FetchContext::trace(visitor); |
| 1064 } | 1045 } |
| 1065 | 1046 |
| 1066 } // namespace blink | 1047 } // namespace blink |
| OLD | NEW |