Index: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
index 801b324af00ce6304fd1890de44a39028a7fe8d5..a56c9dd4174a84132a2f86b672849963b7bd88a4 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
@@ -779,6 +779,8 @@ void ResourceFetcher::storeResourceTimingInitiatorInformation( |
if (!isMainResource || |
context().updateTimingInfoForIFrameNavigation(info.get())) |
m_resourceTimingInfoMap.add(resource, std::move(info)); |
+ else |
+ m_mainResourceTimingInfoMap.add(resource->identifier(), std::move(info)); |
Yoav Weiss
2016/11/29 10:39:32
kinuko@ - I'd love your opinion here as to whether
sunjian
2016/11/29 19:33:30
Acknowledged.
panicker
2016/11/30 00:12:15
Also I added OWNERS of core/fetch to the review (t
kinuko
2016/11/30 07:08:26
Sorry for slow response. Hmm, I don't think we ne
|
} |
ResourceFetcher::RevalidationPolicy |
@@ -1120,6 +1122,16 @@ ArchiveResource* ResourceFetcher::createArchive(Resource* resource) { |
return m_archive ? m_archive->mainResource() : nullptr; |
} |
+ResourceTimingInfo* ResourceFetcher::getMainResourceTimingInfo( |
+ unsigned long identifier) { |
+ MainResourceTimingInfoMap::iterator it = |
+ m_mainResourceTimingInfoMap.find(identifier); |
+ if (it != m_mainResourceTimingInfoMap.end()) { |
+ return it->value.get(); |
+ } |
+ return nullptr; |
+} |
+ |
void ResourceFetcher::didFinishLoading(Resource* resource, |
double finishTime, |
int64_t encodedDataLength, |
@@ -1138,6 +1150,22 @@ void ResourceFetcher::didFinishLoading(Resource* resource, |
DCHECK(finishReason == DidFinishFirstPartInMultipart || |
!m_nonBlockingLoaders.contains(resource->loader())); |
+ MainResourceTimingInfoMap::iterator it = |
+ m_mainResourceTimingInfoMap.find(resource->identifier()); |
+ if (it != m_mainResourceTimingInfoMap.end()) { |
+ // Store redirect responses that were packed inside the final response. |
+ const Vector<ResourceResponse>& responses = |
+ resource->response().redirectResponses(); |
+ for (size_t i = 0; i < responses.size(); ++i) { |
+ const KURL& newURL = i + 1 < responses.size() |
+ ? KURL(responses[i + 1].url()) |
+ : resource->resourceRequest().url(); |
+ bool crossOrigin = IsCrossOrigin(responses[i].url(), newURL); |
+ it->value->addRedirect(responses[i], crossOrigin); |
+ } |
+ it->value->addFinalTransferSize( |
+ encodedDataLength == -1 ? 0 : encodedDataLength); |
+ } |
if (std::unique_ptr<ResourceTimingInfo> info = |
m_resourceTimingInfoMap.take(resource)) { |
// Store redirect responses that were packed inside the final response. |
@@ -1403,6 +1431,13 @@ bool ResourceFetcher::willFollowRedirect( |
bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url()); |
it->value->addRedirect(redirectResponse, crossOrigin); |
} |
+ MainResourceTimingInfoMap::iterator itt = |
+ m_mainResourceTimingInfoMap.find(resource->identifier()); |
+ if (itt != m_mainResourceTimingInfoMap.end()) { |
+ bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url()); |
+ itt->value->addRedirect(redirectResponse, crossOrigin); |
+ } |
+ |
newRequest.setAllowStoredCredentials(resource->options().allowCredentials == |
AllowStoredCredentials); |
willSendRequest(resource->identifier(), newRequest, redirectResponse, |