Index: Source/core/loader/cache/CachedResourceLoader.cpp |
diff --git a/Source/core/loader/cache/CachedResourceLoader.cpp b/Source/core/loader/cache/CachedResourceLoader.cpp |
index 3b17400c14d297570415ab8648c69ea3b97a650e..224638772073606aac9b10d61f4a62892a45bb99 100644 |
--- a/Source/core/loader/cache/CachedResourceLoader.cpp |
+++ b/Source/core/loader/cache/CachedResourceLoader.cpp |
@@ -569,17 +569,17 @@ CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedRe |
void CachedResourceLoader::storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>& resource, const CachedResourceRequest& request) |
{ |
+ CachedResourceInitiatorInfo info = request.initiatorInfo(); |
+ info.startTime = monotonicallyIncreasingTime(); |
if (resource->type() == CachedResource::MainResource) { |
// <iframe>s should report the initial navigation requested by the parent document, but not subsequent navigations. |
if (frame()->ownerElement() && !frame()->ownerElement()->loadedNonEmptyDocument()) { |
- InitiatorInfo info = { frame()->ownerElement()->localName(), monotonicallyIncreasingTime() }; |
- m_initiatorMap.add(resource.get(), info); |
+ info.name = frame()->ownerElement()->localName(); |
+ resource->setInitiatorInfo(info); |
frame()->ownerElement()->didLoadNonEmptyDocument(); |
} |
- } else { |
- InitiatorInfo info = { request.initiatorName(), monotonicallyIncreasingTime() }; |
- m_initiatorMap.add(resource.get(), info); |
- } |
+ } else |
+ resource->setInitiatorInfo(info); |
} |
CachedResourceLoader::RevalidationPolicy CachedResourceLoader::determineRevalidationPolicy(CachedResource::Type type, ResourceRequest& request, bool forPreload, CachedResource* existingResource, CachedResourceRequest::DeferOption defer) const |
@@ -766,17 +766,13 @@ void CachedResourceLoader::loadDone(CachedResource* resource) |
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()) { |
- 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); |
- } |
+ ASSERT(document()); |
+ Document* initiatorDocument = document(); |
+ if (resource->type() == CachedResource::MainResource) |
+ initiatorDocument = document()->parentDocument(); |
+ ASSERT(initiatorDocument); |
+ const CachedResourceInitiatorInfo& info = resource->initiatorInfo(); |
+ initiatorDocument->domWindow()->performance()->addResourceTiming(info.name, initiatorDocument, resource->resourceRequest(), resource->response(), info.startTime, resource->loadFinishTime()); |
} |
if (frame()) |
@@ -1008,8 +1004,6 @@ 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); |
} |
const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions() |