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

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

Issue 42363004: [Resource Timing] Memory cached resources should be reported on first use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix unsigned Created 7 years, 2 months 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: Source/core/fetch/ResourceFetcher.cpp
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
index 4619b687ae461a952b4de2b2ef6aeb8b65001e7c..773a5b0f90a9600973748682ae5a18925fe8b7c2 100644
--- a/Source/core/fetch/ResourceFetcher.cpp
+++ b/Source/core/fetch/ResourceFetcher.cpp
@@ -165,6 +165,22 @@ static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons
return resource;
}
+static void reportResourceTiming(ResourceTimingInfo* info, Resource* resource, double finishTime, Document* initiatorDocument, bool clearLoadTimings)
+{
+ if (resource->type() == Resource::MainResource)
+ initiatorDocument = initiatorDocument->parentDocument();
+ ASSERT(initiatorDocument);
+ info->setInitialRequest(resource->resourceRequest());
+ info->setFinalResponse(resource->response());
+ if (clearLoadTimings)
+ info->clearLoadTimings();
+ info->setLoadFinishTime(finishTime);
+ if (DOMWindow* initiatorWindow = initiatorDocument->domWindow()) {
+ if (Performance* performance = initiatorWindow->performance())
+ performance->addResourceTiming(*info, initiatorDocument);
+ }
+}
+
ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader)
: m_document(0)
, m_documentLoader(documentLoader)
@@ -618,8 +634,15 @@ ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc
return 0;
}
- if (!request.resourceRequest().url().protocolIsData())
+ if (!request.resourceRequest().url().protocolIsData()) {
+ if (policy == Use && !m_validatedURLs.contains(request.resourceRequest().url())) {
+ // Resources loaded from memory cache should be reported the first time they're used.
+ RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(request.options().initiatorInfo.name, monotonicallyIncreasingTime());
+ reportResourceTiming(info.get(), resource.get(), monotonicallyIncreasingTime(), document(), true);
+ }
+
m_validatedURLs.add(request.resourceRequest().url());
+ }
ASSERT(resource->url() == url.string());
m_documentResources.set(resource->url(), resource);
@@ -963,19 +986,9 @@ void ResourceFetcher::didLoadResource(Resource* resource)
if (resource && resource->response().isHTTP() && ((!resource->errorOccurred() && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304) && document()) {
ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource);
if (it != m_resourceTimingInfoMap.end()) {
- Document* initiatorDocument = document();
- if (resource->type() == Resource::MainResource)
- initiatorDocument = document()->parentDocument();
- ASSERT(initiatorDocument);
RefPtr<ResourceTimingInfo> info = it->value;
m_resourceTimingInfoMap.remove(it);
- info->setInitialRequest(resource->resourceRequest());
- info->setFinalResponse(resource->response());
- info->setLoadFinishTime(resource->loadFinishTime());
- if (DOMWindow* initiatorWindow = initiatorDocument->domWindow()) {
- if (Performance* performance = initiatorWindow->performance())
- performance->addResourceTiming(*info, initiatorDocument);
- }
+ reportResourceTiming(info.get(), resource, resource->loadFinishTime(), document(), false);
}
}

Powered by Google App Engine
This is Rietveld 408576698