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

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

Issue 2511313002: transferSize implementation (Closed)
Patch Set: addressed comments Created 4 years 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 3450d9745ae2d068ded4cc8514c008314d7af4b3..e54aa91fc59dbd25841552ca59004ef33068e91a 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -103,6 +103,18 @@ bool IsCrossOrigin(const KURL& a, const KURL& b) {
return !originB->isSameSchemeHostPort(originA.get());
}
+void addRedirectsToTimingInfo(Resource* resource, ResourceTimingInfo* info) {
+ // Store redirect responses that were packed inside the final response.
+ const auto& 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);
+ info->addRedirect(responses[i], crossOrigin);
+ }
+}
+
} // namespace
static void RecordSriResourceIntegrityMismatchEvent(
@@ -597,7 +609,6 @@ Resource* ResourceFetcher::requestResource(
resource->setLinkPreload(false);
break;
}
-
if (!resource)
return nullptr;
if (resource->getType() != factory.type()) {
@@ -641,7 +652,6 @@ Resource* ResourceFetcher::requestResource(
if (!startLoad(resource))
return nullptr;
-
scopedResourceLoadTracker.resourceLoadContinuesBeyondScope();
DCHECK(!resource->errorOccurred() ||
@@ -757,7 +767,7 @@ Resource* ResourceFetcher::createResourceForLoading(
return resource;
}
-void ResourceFetcher::storeResourceTimingInitiatorInformation(
+void ResourceFetcher::storePerformanceTimingInitiatorInformation(
Resource* resource) {
const AtomicString& fetchInitiator = resource->options().initiatorInfo.name;
if (fetchInitiator == FetchInitiatorTypeNames::internal)
@@ -771,6 +781,14 @@ void ResourceFetcher::storeResourceTimingInitiatorInformation(
? resource->resourceRequest().navigationStartTime()
: monotonicallyIncreasingTime();
+ // This buffer is created and populated for providing transferSize
+ // and redirect timing opt-in information.
+ if (isMainResource) {
+ DCHECK(!m_navigationTimingInfo);
+ m_navigationTimingInfo =
+ ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource);
+ }
+
std::unique_ptr<ResourceTimingInfo> info =
ResourceTimingInfo::create(fetchInitiator, startTime, isMainResource);
@@ -782,8 +800,9 @@ void ResourceFetcher::storeResourceTimingInitiatorInformation(
}
if (!isMainResource ||
- context().updateTimingInfoForIFrameNavigation(info.get()))
+ context().updateTimingInfoForIFrameNavigation(info.get())) {
m_resourceTimingInfoMap.add(resource, std::move(info));
+ }
}
ResourceFetcher::RevalidationPolicy
@@ -1125,6 +1144,10 @@ ArchiveResource* ResourceFetcher::createArchive(Resource* resource) {
return m_archive ? m_archive->mainResource() : nullptr;
}
+ResourceTimingInfo* ResourceFetcher::getNavigationTimingInfo() {
+ return m_navigationTimingInfo.get();
+}
+
void ResourceFetcher::didFinishLoading(Resource* resource,
double finishTime,
DidFinishLoadingReason finishReason) {
@@ -1143,18 +1166,19 @@ void ResourceFetcher::didFinishLoading(Resource* resource,
DCHECK(finishReason == DidFinishFirstPartInMultipart ||
!m_nonBlockingLoaders.contains(resource->loader()));
+ if (resource->getType() == Resource::MainResource) {
+ DCHECK(m_navigationTimingInfo);
+ // Store redirect responses that were packed inside the final response.
+ addRedirectsToTimingInfo(resource, m_navigationTimingInfo.get());
+ if (resource->response().isHTTP()) {
+ m_navigationTimingInfo->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.
- 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);
- info->addRedirect(responses[i], crossOrigin);
- }
+ addRedirectsToTimingInfo(resource, info.get());
if (resource->response().isHTTP() &&
resource->response().httpStatusCode() < 400) {
@@ -1326,7 +1350,7 @@ bool ResourceFetcher::startLoad(Resource* resource) {
else
m_nonBlockingLoaders.add(loader);
- storeResourceTimingInitiatorInformation(resource);
+ storePerformanceTimingInitiatorInformation(resource);
resource->setFetcherSecurityOrigin(sourceOrigin);
loader->activateCacheAwareLoadingIfNeeded(request);
@@ -1419,6 +1443,13 @@ ResourceRequestBlockedReason ResourceFetcher::willFollowRedirect(
bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url());
it->value->addRedirect(redirectResponse, crossOrigin);
}
+
+ if (resource->getType() == Resource::MainResource) {
+ DCHECK(m_navigationTimingInfo);
+ bool crossOrigin = IsCrossOrigin(redirectResponse.url(), newRequest.url());
+ m_navigationTimingInfo->addRedirect(redirectResponse, crossOrigin);
+ }
+
newRequest.setAllowStoredCredentials(resource->options().allowCredentials ==
AllowStoredCredentials);
willSendRequest(resource->identifier(), newRequest, redirectResponse,
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.h ('k') | third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698