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 9d5175a1bb4f0f2b7e8640ba448dc50e9c363834..f0ee0c8cb9858422e02042e05d5738af2b888c53 100644 |
| --- a/Source/core/loader/cache/CachedResourceLoader.cpp |
| +++ b/Source/core/loader/cache/CachedResourceLoader.cpp |
| @@ -56,6 +56,7 @@ |
| #include "core/page/DOMWindow.h" |
| #include "core/page/Frame.h" |
| #include "core/page/Performance.h" |
| +#include "core/page/ResourceTimingInfo.h" |
| #include "core/page/Settings.h" |
| #include "core/platform/Logging.h" |
| #include "weborigin/SecurityOrigin.h" |
| @@ -575,18 +576,17 @@ CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedRe |
| void CachedResourceLoader::storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>& resource, const CachedResourceRequest& request) |
| { |
| - CachedResourceInitiatorInfo info = request.initiatorInfo(); |
| - info.startTime = monotonicallyIncreasingTime(); |
| + RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(request.initiatorInfo().name, 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()) { |
| - info.name = frame()->ownerElement()->localName(); |
| - m_initiatorMap.add(resource.get(), info); |
| + info->setInitiatorType(frame()->ownerElement()->localName()); |
| + m_resourceTimingInfoMap.add(resource.get(), info); |
| frame()->ownerElement()->didLoadNonEmptyDocument(); |
| } |
| } else { |
| - m_initiatorMap.add(resource.get(), info); |
| + m_resourceTimingInfoMap.add(resource.get(), info); |
| } |
| } |
| @@ -758,22 +758,32 @@ CachePolicy CachedResourceLoader::cachePolicy(CachedResource::Type type) const |
| return CachePolicyVerify; |
| } |
| +void CachedResourceLoader::redirectReceived(CachedResource* resource, const ResourceResponse& redirectResponse) |
| +{ |
| + HashMap<CachedResource*, RefPtr<ResourceTimingInfo> >::iterator infoIter = m_resourceTimingInfoMap.find(resource); |
|
James Simonsen
2013/06/04 01:13:04
Can you make this a typedef in the .h file? I shou
Pan
2013/06/04 02:48:34
yep, done.
|
| + 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*, CachedResourceInitiatorInfo>::iterator initiatorIt = m_initiatorMap.find(resource); |
| - if (initiatorIt != m_initiatorMap.end()) { |
| + HashMap<CachedResource*, RefPtr<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 CachedResourceInitiatorInfo& info = initiatorIt->value; |
| - initiatorDocument->domWindow()->performance()->addResourceTiming(info.name, initiatorDocument, resource->resourceRequest(), resource->response(), info.startTime, resource->loadFinishTime()); |
| - m_initiatorMap.remove(initiatorIt); |
| + RefPtr<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); |
| } |
| } |