OLD | NEW |
---|---|
1 /* | 1 /* |
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
6 rights reserved. | 6 rights reserved. |
7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
8 | 8 |
9 This library is free software; you can redistribute it and/or | 9 This library is free software; you can redistribute it and/or |
10 modify it under the terms of the GNU Library General Public | 10 modify it under the terms of the GNU Library General Public |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
305 request.resourceRequest().requestContext()); | 305 request.resourceRequest().requestContext()); |
306 } | 306 } |
307 | 307 |
308 if (isStaticData) | 308 if (isStaticData) |
309 return; | 309 return; |
310 | 310 |
311 if (type == ResourceLoadingFromCache && !resource->stillNeedsLoad() && | 311 if (type == ResourceLoadingFromCache && !resource->stillNeedsLoad() && |
312 !m_validatedURLs.contains(request.resourceRequest().url())) { | 312 !m_validatedURLs.contains(request.resourceRequest().url())) { |
313 // Resources loaded from memory cache should be reported the first time | 313 // Resources loaded from memory cache should be reported the first time |
314 // they're used. | 314 // they're used. |
315 std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create( | 315 RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create( |
316 request.options().initiatorInfo.name, monotonicallyIncreasingTime(), | 316 request.options().initiatorInfo.name, monotonicallyIncreasingTime(), |
317 resource->getType() == Resource::MainResource); | 317 resource->getType() == Resource::MainResource); |
318 populateTimingInfo(info.get(), resource); | 318 populateTimingInfo(info.get(), resource); |
319 info->clearLoadTimings(); | 319 info->clearLoadTimings(); |
320 info->setLoadFinishTime(info->initialTime()); | 320 info->setLoadFinishTime(info->initialTime()); |
321 m_scheduledResourceTimingReports.push_back(std::move(info)); | 321 m_scheduledResourceTimingReports.push_back(info.release()); |
322 if (!m_resourceTimingReportTimer.isActive()) | 322 if (!m_resourceTimingReportTimer.isActive()) |
323 m_resourceTimingReportTimer.startOneShot(0, BLINK_FROM_HERE); | 323 m_resourceTimingReportTimer.startOneShot(0, BLINK_FROM_HERE); |
324 } | 324 } |
325 | 325 |
326 if (m_validatedURLs.size() >= kMaxValidatedURLsSize) { | 326 if (m_validatedURLs.size() >= kMaxValidatedURLsSize) { |
327 m_validatedURLs.clear(); | 327 m_validatedURLs.clear(); |
328 } | 328 } |
329 m_validatedURLs.insert(request.resourceRequest().url()); | 329 m_validatedURLs.insert(request.resourceRequest().url()); |
330 } | 330 } |
331 | 331 |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
626 return nullptr; | 626 return nullptr; |
627 scopedResourceLoadTracker.resourceLoadContinuesBeyondScope(); | 627 scopedResourceLoadTracker.resourceLoadContinuesBeyondScope(); |
628 | 628 |
629 DCHECK(!resource->errorOccurred() || | 629 DCHECK(!resource->errorOccurred() || |
630 request.options().synchronousPolicy == RequestSynchronously); | 630 request.options().synchronousPolicy == RequestSynchronously); |
631 return resource; | 631 return resource; |
632 } | 632 } |
633 | 633 |
634 void ResourceFetcher::resourceTimingReportTimerFired(TimerBase* timer) { | 634 void ResourceFetcher::resourceTimingReportTimerFired(TimerBase* timer) { |
635 DCHECK_EQ(timer, &m_resourceTimingReportTimer); | 635 DCHECK_EQ(timer, &m_resourceTimingReportTimer); |
636 Vector<std::unique_ptr<ResourceTimingInfo>> timingReports; | 636 Vector<RefPtr<ResourceTimingInfo>> timingReports; |
637 timingReports.swap(m_scheduledResourceTimingReports); | 637 timingReports.swap(m_scheduledResourceTimingReports); |
638 for (const auto& timingInfo : timingReports) | 638 for (const auto& timingInfo : timingReports) |
639 context().addResourceTiming(*timingInfo); | 639 context().addResourceTiming(*timingInfo); |
640 } | 640 } |
641 | 641 |
642 void ResourceFetcher::determineRequestContext(ResourceRequest& request, | 642 void ResourceFetcher::determineRequestContext(ResourceRequest& request, |
643 Resource::Type type, | 643 Resource::Type type, |
644 bool isMainFrame) { | 644 bool isMainFrame) { |
645 WebURLRequest::RequestContext requestContext = | 645 WebURLRequest::RequestContext requestContext = |
646 requestContextFromType(isMainFrame, type); | 646 requestContextFromType(isMainFrame, type); |
(...skipping 16 matching lines...) Expand all Loading... | |
663 if (request.requestContext() == WebURLRequest::RequestContextUnspecified) | 663 if (request.requestContext() == WebURLRequest::RequestContextUnspecified) |
664 determineRequestContext(request, type); | 664 determineRequestContext(request, type); |
665 if (type == Resource::LinkPrefetch) | 665 if (type == Resource::LinkPrefetch) |
666 request.setHTTPHeaderField(HTTPNames::Purpose, "prefetch"); | 666 request.setHTTPHeaderField(HTTPNames::Purpose, "prefetch"); |
667 | 667 |
668 context().addAdditionalRequestHeaders( | 668 context().addAdditionalRequestHeaders( |
669 request, | 669 request, |
670 (type == Resource::MainResource) ? FetchMainResource : FetchSubresource); | 670 (type == Resource::MainResource) ? FetchMainResource : FetchSubresource); |
671 } | 671 } |
672 | 672 |
673 ResourceTimingInfo* ResourceFetcher::getNavigationTimingInfo() { | |
Kunihiko Sakamoto
2017/02/13 08:22:29
Why is this moved from line 1134?
sunjian
2017/02/14 21:29:03
I think i deleted it because i thought i didn't ne
Kunihiko Sakamoto
2017/02/15 06:35:30
I see. Can you move it back to original position,
sunjian
2017/02/15 20:30:28
Done.
| |
674 return m_navigationTimingInfo.get(); | |
675 } | |
676 | |
673 void ResourceFetcher::initializeRevalidation( | 677 void ResourceFetcher::initializeRevalidation( |
674 ResourceRequest& revalidatingRequest, | 678 ResourceRequest& revalidatingRequest, |
675 Resource* resource) { | 679 Resource* resource) { |
676 DCHECK(resource); | 680 DCHECK(resource); |
677 DCHECK(memoryCache()->contains(resource)); | 681 DCHECK(memoryCache()->contains(resource)); |
678 DCHECK(resource->isLoaded()); | 682 DCHECK(resource->isLoaded()); |
679 DCHECK(resource->canUseCacheValidator()); | 683 DCHECK(resource->canUseCacheValidator()); |
680 DCHECK(!resource->isCacheValidator()); | 684 DCHECK(!resource->isCacheValidator()); |
681 DCHECK(!context().isControlledByServiceWorker()); | 685 DCHECK(!context().isControlledByServiceWorker()); |
682 | 686 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
754 : monotonicallyIncreasingTime(); | 758 : monotonicallyIncreasingTime(); |
755 | 759 |
756 // This buffer is created and populated for providing transferSize | 760 // This buffer is created and populated for providing transferSize |
757 // and redirect timing opt-in information. | 761 // and redirect timing opt-in information. |
758 if (isMainResource) { | 762 if (isMainResource) { |
759 DCHECK(!m_navigationTimingInfo); | 763 DCHECK(!m_navigationTimingInfo); |
760 m_navigationTimingInfo = | 764 m_navigationTimingInfo = |
761 ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); | 765 ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); |
762 } | 766 } |
763 | 767 |
764 std::unique_ptr<ResourceTimingInfo> info = | 768 RefPtr<ResourceTimingInfo> info = |
765 ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); | 769 ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource); |
766 | 770 |
767 if (resource->isCacheValidator()) { | 771 if (resource->isCacheValidator()) { |
768 const AtomicString& timingAllowOrigin = | 772 const AtomicString& timingAllowOrigin = |
769 resource->response().httpHeaderField(HTTPNames::Timing_Allow_Origin); | 773 resource->response().httpHeaderField(HTTPNames::Timing_Allow_Origin); |
770 if (!timingAllowOrigin.isEmpty()) | 774 if (!timingAllowOrigin.isEmpty()) |
771 info->setOriginalTimingAllowOrigin(timingAllowOrigin); | 775 info->setOriginalTimingAllowOrigin(timingAllowOrigin); |
772 } | 776 } |
773 | 777 |
774 if (!isMainResource || | 778 if (!isMainResource || |
775 context().updateTimingInfoForIFrameNavigation(info.get())) { | 779 context().updateTimingInfoForIFrameNavigation(info.get())) { |
776 m_resourceTimingInfoMap.add(resource, std::move(info)); | 780 m_resourceTimingInfoMap.add(resource, info.release()); |
777 } | 781 } |
778 } | 782 } |
779 | 783 |
780 void ResourceFetcher::recordResourceTimingOnRedirect( | 784 void ResourceFetcher::recordResourceTimingOnRedirect( |
781 Resource* resource, | 785 Resource* resource, |
782 const ResourceResponse& redirectResponse, | 786 const ResourceResponse& redirectResponse, |
783 bool crossOrigin) { | 787 bool crossOrigin) { |
784 ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource); | 788 ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource); |
785 if (it != m_resourceTimingInfoMap.end()) { | 789 if (it != m_resourceTimingInfoMap.end()) { |
786 it->value->addRedirect(redirectResponse, crossOrigin); | 790 it->value->addRedirect(redirectResponse, crossOrigin); |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1124 } | 1128 } |
1125 | 1129 |
1126 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) { | 1130 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) { |
1127 // Only the top-frame can load MHTML. | 1131 // Only the top-frame can load MHTML. |
1128 if (!context().isMainFrame()) | 1132 if (!context().isMainFrame()) |
1129 return nullptr; | 1133 return nullptr; |
1130 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer()); | 1134 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer()); |
1131 return m_archive ? m_archive->mainResource() : nullptr; | 1135 return m_archive ? m_archive->mainResource() : nullptr; |
1132 } | 1136 } |
1133 | 1137 |
1134 ResourceTimingInfo* ResourceFetcher::getNavigationTimingInfo() { | |
1135 return m_navigationTimingInfo.get(); | |
1136 } | |
1137 | |
1138 void ResourceFetcher::handleLoadCompletion(Resource* resource) { | 1138 void ResourceFetcher::handleLoadCompletion(Resource* resource) { |
1139 context().didLoadResource(resource); | 1139 context().didLoadResource(resource); |
1140 | 1140 |
1141 resource->reloadIfLoFiOrPlaceholderImage(this, Resource::kReloadIfNeeded); | 1141 resource->reloadIfLoFiOrPlaceholderImage(this, Resource::kReloadIfNeeded); |
1142 } | 1142 } |
1143 | 1143 |
1144 void ResourceFetcher::handleLoaderFinish(Resource* resource, | 1144 void ResourceFetcher::handleLoaderFinish(Resource* resource, |
1145 double finishTime, | 1145 double finishTime, |
1146 LoaderFinishType type) { | 1146 LoaderFinishType type) { |
1147 DCHECK(resource); | 1147 DCHECK(resource); |
(...skipping 14 matching lines...) Expand all Loading... | |
1162 if (resource->getType() == Resource::MainResource) { | 1162 if (resource->getType() == Resource::MainResource) { |
1163 DCHECK(m_navigationTimingInfo); | 1163 DCHECK(m_navigationTimingInfo); |
1164 // Store redirect responses that were packed inside the final response. | 1164 // Store redirect responses that were packed inside the final response. |
1165 addRedirectsToTimingInfo(resource, m_navigationTimingInfo.get()); | 1165 addRedirectsToTimingInfo(resource, m_navigationTimingInfo.get()); |
1166 if (resource->response().isHTTP()) { | 1166 if (resource->response().isHTTP()) { |
1167 populateTimingInfo(m_navigationTimingInfo.get(), resource); | 1167 populateTimingInfo(m_navigationTimingInfo.get(), resource); |
1168 m_navigationTimingInfo->addFinalTransferSize( | 1168 m_navigationTimingInfo->addFinalTransferSize( |
1169 encodedDataLength == -1 ? 0 : encodedDataLength); | 1169 encodedDataLength == -1 ? 0 : encodedDataLength); |
1170 } | 1170 } |
1171 } | 1171 } |
1172 if (std::unique_ptr<ResourceTimingInfo> info = | 1172 if (RefPtr<ResourceTimingInfo> info = |
1173 m_resourceTimingInfoMap.take(resource)) { | 1173 m_resourceTimingInfoMap.take(resource)) { |
1174 // Store redirect responses that were packed inside the final response. | 1174 // Store redirect responses that were packed inside the final response. |
1175 addRedirectsToTimingInfo(resource, info.get()); | 1175 addRedirectsToTimingInfo(resource, info.get()); |
1176 | 1176 |
1177 if (resource->response().isHTTP() && | 1177 if (resource->response().isHTTP() && |
1178 resource->response().httpStatusCode() < 400) { | 1178 resource->response().httpStatusCode() < 400) { |
1179 populateTimingInfo(info.get(), resource); | 1179 populateTimingInfo(info.get(), resource); |
1180 info->setLoadFinishTime(finishTime); | 1180 info->setLoadFinishTime(finishTime); |
1181 // encodedDataLength == -1 means "not available". | 1181 // encodedDataLength == -1 means "not available". |
1182 // TODO(ricea): Find cases where it is not available but the | 1182 // TODO(ricea): Find cases where it is not available but the |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1543 visitor->trace(m_context); | 1543 visitor->trace(m_context); |
1544 visitor->trace(m_archive); | 1544 visitor->trace(m_archive); |
1545 visitor->trace(m_loaders); | 1545 visitor->trace(m_loaders); |
1546 visitor->trace(m_nonBlockingLoaders); | 1546 visitor->trace(m_nonBlockingLoaders); |
1547 visitor->trace(m_documentResources); | 1547 visitor->trace(m_documentResources); |
1548 visitor->trace(m_preloads); | 1548 visitor->trace(m_preloads); |
1549 visitor->trace(m_resourceTimingInfoMap); | 1549 visitor->trace(m_resourceTimingInfoMap); |
1550 } | 1550 } |
1551 | 1551 |
1552 } // namespace blink | 1552 } // namespace blink |
OLD | NEW |