| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
| 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
| 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
| 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 7 | 7 |
| 8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
| 9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
| 10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 static void reportResourceTiming(ResourceTimingInfo* info, Document* initiatorDo
cument, bool isMainResource) | 179 static void reportResourceTiming(ResourceTimingInfo* info, Document* initiatorDo
cument, bool isMainResource) |
| 180 { | 180 { |
| 181 if (initiatorDocument && isMainResource) | 181 if (initiatorDocument && isMainResource) |
| 182 initiatorDocument = initiatorDocument->parentDocument(); | 182 initiatorDocument = initiatorDocument->parentDocument(); |
| 183 if (!initiatorDocument || !initiatorDocument->loader()) | 183 if (!initiatorDocument || !initiatorDocument->loader()) |
| 184 return; | 184 return; |
| 185 if (LocalDOMWindow* initiatorWindow = initiatorDocument->domWindow()) | 185 if (LocalDOMWindow* initiatorWindow = initiatorDocument->domWindow()) |
| 186 initiatorWindow->performance().addResourceTiming(*info, initiatorDocumen
t); | 186 initiatorWindow->performance().addResourceTiming(*info, initiatorDocumen
t); |
| 187 } | 187 } |
| 188 | 188 |
| 189 static ResourceRequest::TargetType requestTargetType(const ResourceFetcher* fetc
her, const ResourceRequest& request, Resource::Type type) | 189 static ResourceRequest::RequestContext requestContextFromType(const ResourceFetc
her* fetcher, Resource::Type type) |
| 190 { | 190 { |
| 191 switch (type) { | 191 switch (type) { |
| 192 case Resource::MainResource: | 192 case Resource::MainResource: |
| 193 if (fetcher->frame()->tree().parent()) | 193 if (fetcher->frame()->tree().parent()) |
| 194 return ResourceRequest::TargetIsSubframe; | 194 return ResourceRequest::SubFrameContext; |
| 195 return ResourceRequest::TargetIsMainFrame; | 195 return ResourceRequest::MainFrameContext; |
| 196 case Resource::XSLStyleSheet: | 196 case Resource::XSLStyleSheet: |
| 197 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 197 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
| 198 case Resource::CSSStyleSheet: | 198 case Resource::CSSStyleSheet: |
| 199 return ResourceRequest::TargetIsStyleSheet; | 199 return ResourceRequest::StyleContext; |
| 200 case Resource::Script: | 200 case Resource::Script: |
| 201 return ResourceRequest::TargetIsScript; | 201 return ResourceRequest::ScriptContext; |
| 202 case Resource::Font: | 202 case Resource::Font: |
| 203 return ResourceRequest::TargetIsFont; | 203 return ResourceRequest::FontContext; |
| 204 case Resource::Image: | 204 case Resource::Image: |
| 205 return ResourceRequest::TargetIsImage; | 205 return ResourceRequest::ImageContext; |
| 206 case Resource::Raw: | 206 case Resource::Raw: |
| 207 return ResourceRequest::SubresourceContext; |
| 207 case Resource::ImportResource: | 208 case Resource::ImportResource: |
| 208 return ResourceRequest::TargetIsSubresource; | 209 return ResourceRequest::ScriptContext; |
| 209 case Resource::LinkPrefetch: | 210 case Resource::LinkPrefetch: |
| 210 return ResourceRequest::TargetIsPrefetch; | 211 return ResourceRequest::PrefetchContext; |
| 211 case Resource::LinkSubresource: | 212 case Resource::LinkSubresource: |
| 212 return ResourceRequest::TargetIsSubresource; | 213 return ResourceRequest::SubresourceContext; |
| 213 case Resource::TextTrack: | 214 case Resource::TextTrack: |
| 214 return ResourceRequest::TargetIsTextTrack; | 215 return ResourceRequest::TextTrackContext; |
| 215 case Resource::SVGDocument: | 216 case Resource::SVGDocument: |
| 216 return ResourceRequest::TargetIsImage; | 217 return ResourceRequest::ImageContext; |
| 217 case Resource::Media: | 218 case Resource::Media: // TODO: Split this. |
| 218 return ResourceRequest::TargetIsMedia; | 219 return ResourceRequest::VideoContext; |
| 219 } | 220 } |
| 220 ASSERT_NOT_REACHED(); | 221 ASSERT_NOT_REACHED(); |
| 221 return ResourceRequest::TargetIsSubresource; | 222 return ResourceRequest::SubresourceContext; |
| 222 } | 223 } |
| 223 | 224 |
| 224 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) | 225 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) |
| 225 : m_document(nullptr) | 226 : m_document(nullptr) |
| 226 , m_documentLoader(documentLoader) | 227 , m_documentLoader(documentLoader) |
| 227 , m_requestCount(0) | 228 , m_requestCount(0) |
| 228 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl
ectDocumentResourcesTimerFired) | 229 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl
ectDocumentResourcesTimerFired) |
| 229 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) | 230 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) |
| 230 , m_autoLoadImages(true) | 231 , m_autoLoadImages(true) |
| 231 , m_imagesEnabled(true) | 232 , m_imagesEnabled(true) |
| (...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; | 783 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; |
| 783 timingReports.swap(m_scheduledResourceTimingReports); | 784 timingReports.swap(m_scheduledResourceTimingReports); |
| 784 HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator end = timingReports.end(
); | 785 HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator end = timingReports.end(
); |
| 785 for (HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator it = timingReports.
begin(); it != end; ++it) { | 786 for (HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator it = timingReports.
begin(); it != end; ++it) { |
| 786 RefPtr<ResourceTimingInfo> info = it->key; | 787 RefPtr<ResourceTimingInfo> info = it->key; |
| 787 bool isMainResource = it->value; | 788 bool isMainResource = it->value; |
| 788 reportResourceTiming(info.get(), document(), isMainResource); | 789 reportResourceTiming(info.get(), document(), isMainResource); |
| 789 } | 790 } |
| 790 } | 791 } |
| 791 | 792 |
| 792 void ResourceFetcher::determineTargetType(ResourceRequest& request, Resource::Ty
pe type) | 793 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type) |
| 793 { | 794 { |
| 794 ResourceRequest::TargetType targetType = requestTargetType(this, request, ty
pe); | 795 ResourceRequest::RequestContext requestContext = requestContextFromType(this
, type); |
| 795 request.setTargetType(targetType); | 796 request.setRequestContext(requestContext); |
| 796 } | 797 } |
| 797 | 798 |
| 798 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) | 799 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) |
| 799 { | 800 { |
| 800 if (type == Resource::MainResource) { | 801 if (type == Resource::MainResource) { |
| 801 FrameLoadType frameLoadType = frame()->loader().loadType(); | 802 FrameLoadType frameLoadType = frame()->loader().loadType(); |
| 802 if (request.httpMethod() == "POST" && frameLoadType == FrameLoadTypeBack
Forward) | 803 if (request.httpMethod() == "POST" && frameLoadType == FrameLoadTypeBack
Forward) |
| 803 return ReturnCacheDataDontLoad; | 804 return ReturnCacheDataDontLoad; |
| 804 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) | 805 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) |
| 805 return ReturnCacheDataElseLoad; | 806 return ReturnCacheDataElseLoad; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 827 return UseProtocolCachePolicy; | 828 return UseProtocolCachePolicy; |
| 828 } | 829 } |
| 829 | 830 |
| 830 void ResourceFetcher::addAdditionalRequestHeaders(ResourceRequest& request, Reso
urce::Type type) | 831 void ResourceFetcher::addAdditionalRequestHeaders(ResourceRequest& request, Reso
urce::Type type) |
| 831 { | 832 { |
| 832 if (!frame()) | 833 if (!frame()) |
| 833 return; | 834 return; |
| 834 | 835 |
| 835 if (request.cachePolicy() == UseProtocolCachePolicy) | 836 if (request.cachePolicy() == UseProtocolCachePolicy) |
| 836 request.setCachePolicy(resourceRequestCachePolicy(request, type)); | 837 request.setCachePolicy(resourceRequestCachePolicy(request, type)); |
| 837 if (request.targetType() == ResourceRequest::TargetIsUnspecified) | 838 if (request.requestContext() == ResourceRequest::UnspecifiedContext) |
| 838 determineTargetType(request, type); | 839 determineRequestContext(request, type); |
| 839 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) | 840 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) |
| 840 request.setHTTPHeaderField("Purpose", "prefetch"); | 841 request.setHTTPHeaderField("Purpose", "prefetch"); |
| 841 | 842 |
| 842 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); | 843 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); |
| 843 } | 844 } |
| 844 | 845 |
| 845 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
Request& request, Resource* resource) | 846 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
Request& request, Resource* resource) |
| 846 { | 847 { |
| 847 ASSERT(resource); | 848 ASSERT(resource); |
| 848 ASSERT(memoryCache()->contains(resource)); | 849 ASSERT(memoryCache()->contains(resource)); |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1498 } | 1499 } |
| 1499 } | 1500 } |
| 1500 | 1501 |
| 1501 void ResourceFetcher::trace(Visitor* visitor) | 1502 void ResourceFetcher::trace(Visitor* visitor) |
| 1502 { | 1503 { |
| 1503 visitor->trace(m_document); | 1504 visitor->trace(m_document); |
| 1504 ResourceLoaderHost::trace(visitor); | 1505 ResourceLoaderHost::trace(visitor); |
| 1505 } | 1506 } |
| 1506 | 1507 |
| 1507 } | 1508 } |
| OLD | NEW |