Chromium Code Reviews| 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() |