| Index: Source/core/loader/cache/CachedResourceLoader.cpp
|
| diff --git a/Source/core/loader/cache/CachedResourceLoader.cpp b/Source/core/loader/cache/CachedResourceLoader.cpp
|
| index 25a197373f9eaee8357d825f35eca031f09ace4d..61305beabf5e39254dd41a2616912d1f747f7a96 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.
|
| 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()
|
|
|