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

Unified Diff: Source/core/loader/cache/CachedResourceLoader.cpp

Issue 13912021: [Resource Timing] Expose redirect timing information (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2nd Created 7 years, 8 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/loader/cache/CachedResourceLoader.cpp
diff --git a/Source/core/loader/cache/CachedResourceLoader.cpp b/Source/core/loader/cache/CachedResourceLoader.cpp
index eb85f1d227758b739e3e6e7b5c2a3eefaf8cf76d..429a34b57b75b78dbed8d95410798d2609239a25 100644
--- a/Source/core/loader/cache/CachedResourceLoader.cpp
+++ b/Source/core/loader/cache/CachedResourceLoader.cpp
@@ -50,6 +50,7 @@
#include "MemoryCache.h"
#include "Performance.h"
#include "PingLoader.h"
+#include "ResourceTimingInfo.h"
#include "SecurityOrigin.h"
#include "Settings.h"
#include <wtf/MemoryInstrumentationHashMap.h>
@@ -487,12 +488,12 @@ void CachedResourceLoader::storeResourceTimingInitiatorInformation(const CachedR
if (resource->type() == CachedResource::MainResource) {
// <iframe>s should report the initial navigation requested by the parent document, but not subsequent navigations.
Pan 2013/04/23 15:27:38 I don't quite understand here, and seems it affect
Pan 2013/04/25 12:40:51 The problem is m_documentLoader->frameLoader()->st
if (frame()->ownerElement() && m_documentLoader->frameLoader()->stateMachine()->committingFirstRealLoad()) {
- InitiatorInfo info = { frame()->ownerElement()->localName(), monotonicallyIncreasingTime() };
- m_initiatorMap.add(resource.get(), info);
+ ResourceTimingInfo info(frame()->ownerElement()->localName(), monotonicallyIncreasingTime());
+ m_resourceTimingInfoMap.add(resource.get(), info);
}
} else {
- InitiatorInfo info = { request.initiatorName(), monotonicallyIncreasingTime() };
- m_initiatorMap.add(resource.get(), info);
+ ResourceTimingInfo info(request.initiatorName(), monotonicallyIncreasingTime());
+ m_resourceTimingInfoMap.add(resource.get(), info);
}
}
@@ -674,22 +675,32 @@ void CachedResourceLoader::removeCachedResource(CachedResource* resource) const
m_documentResources.remove(resource->url());
}
+void CachedResourceLoader::redirectReceived(CachedResource* resource, const ResourceResponse& redirectResponse)
+{
+ HashMap<CachedResource*, ResourceTimingInfo>::iterator infoIter = m_resourceTimingInfoMap.find(resource);
+ if (infoIter != m_resourceTimingInfoMap.end())
+ infoIter->value.addRedirect(redirectResponse);
+}
+
void CachedResourceLoader::loadDone(CachedResource* resource)
{
RefPtr<DocumentLoader> protectDocumentLoader(m_documentLoader);
RefPtr<Document> protectDocument(m_document);
if (resource && resource->response().isHTTP() && ((!resource->errorOccurred() && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304)) {
- HashMap<CachedResource*, InitiatorInfo>::iterator initiatorIt = m_initiatorMap.find(resource);
- if (initiatorIt != m_initiatorMap.end()) {
+ HashMap<CachedResource*, ResourceTimingInfo>::iterator infoIt = m_resourceTimingInfoMap.find(resource);
+ if (infoIt != m_resourceTimingInfoMap.end()) {
ASSERT(document());
Document* initiatorDocument = document();
if (resource->type() == CachedResource::MainResource)
initiatorDocument = document()->parentDocument();
ASSERT(initiatorDocument);
- const InitiatorInfo& info = initiatorIt->value;
- initiatorDocument->domWindow()->performance()->addResourceTiming(info.name, initiatorDocument, resource->resourceRequest(), resource->response(), info.startTime, resource->loadFinishTime());
- m_initiatorMap.remove(initiatorIt);
+ ResourceTimingInfo& info = infoIt->value;
+ info.setInitialRequest(resource->resourceRequest());
+ info.setFinalResponse(resource->response());
+ info.setLoadFinishTime(resource->loadFinishTime());
+ initiatorDocument->domWindow()->performance()->addResourceTiming(info, initiatorDocument);
+ m_resourceTimingInfoMap.remove(infoIt);
}
}
@@ -922,8 +933,8 @@ void CachedResourceLoader::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo)
info.addMember(m_preloads, "preloads");
info.addMember(m_pendingPreloads, "pendingPreloads");
info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocumentResourcesTimer");
- // FIXME: m_initiatorMap has pointers to already deleted CachedResources
- info.ignoreMember(m_initiatorMap);
+ // FIXME: m_resourceTimingInfoMap has pointers to already deleted CachedResources
+ info.ignoreMember(m_resourceTimingInfoMap);
}
const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions()

Powered by Google App Engine
This is Rietveld 408576698