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

Unified Diff: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp

Issue 2511313002: transferSize implementation (Closed)
Patch Set: added TODO Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698