| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 #include "core/timing/ResourceTimingInfo.h" | 59 #include "core/timing/ResourceTimingInfo.h" |
| 60 #include "core/frame/Settings.h" | 60 #include "core/frame/Settings.h" |
| 61 #include "core/svg/graphics/SVGImageChromeClient.h" | 61 #include "core/svg/graphics/SVGImageChromeClient.h" |
| 62 #include "platform/Logging.h" | 62 #include "platform/Logging.h" |
| 63 #include "platform/RuntimeEnabledFeatures.h" | 63 #include "platform/RuntimeEnabledFeatures.h" |
| 64 #include "platform/TraceEvent.h" | 64 #include "platform/TraceEvent.h" |
| 65 #include "platform/weborigin/SecurityOrigin.h" | 65 #include "platform/weborigin/SecurityOrigin.h" |
| 66 #include "platform/weborigin/SecurityPolicy.h" | 66 #include "platform/weborigin/SecurityPolicy.h" |
| 67 #include "public/platform/Platform.h" | 67 #include "public/platform/Platform.h" |
| 68 #include "public/platform/WebURL.h" | 68 #include "public/platform/WebURL.h" |
| 69 #include "public/platform/WebURLRequest.h" |
| 69 #include "wtf/text/CString.h" | 70 #include "wtf/text/CString.h" |
| 70 #include "wtf/text/WTFString.h" | 71 #include "wtf/text/WTFString.h" |
| 71 | 72 |
| 72 #define PRELOAD_DEBUG 0 | 73 #define PRELOAD_DEBUG 0 |
| 73 | 74 |
| 75 using blink::WebURLRequest; |
| 76 |
| 74 namespace WebCore { | 77 namespace WebCore { |
| 75 | 78 |
| 76 static Resource* createResource(Resource::Type type, const ResourceRequest& requ
est, const String& charset) | 79 static Resource* createResource(Resource::Type type, const ResourceRequest& requ
est, const String& charset) |
| 77 { | 80 { |
| 78 switch (type) { | 81 switch (type) { |
| 79 case Resource::Image: | 82 case Resource::Image: |
| 80 return new ImageResource(request); | 83 return new ImageResource(request); |
| 81 case Resource::CSSStyleSheet: | 84 case Resource::CSSStyleSheet: |
| 82 return new CSSStyleSheetResource(request, charset); | 85 return new CSSStyleSheetResource(request, charset); |
| 83 case Resource::Script: | 86 case Resource::Script: |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 static void reportResourceTiming(ResourceTimingInfo* info, Document* initiatorDo
cument, bool isMainResource) | 182 static void reportResourceTiming(ResourceTimingInfo* info, Document* initiatorDo
cument, bool isMainResource) |
| 180 { | 183 { |
| 181 if (initiatorDocument && isMainResource) | 184 if (initiatorDocument && isMainResource) |
| 182 initiatorDocument = initiatorDocument->parentDocument(); | 185 initiatorDocument = initiatorDocument->parentDocument(); |
| 183 if (!initiatorDocument || !initiatorDocument->loader()) | 186 if (!initiatorDocument || !initiatorDocument->loader()) |
| 184 return; | 187 return; |
| 185 if (LocalDOMWindow* initiatorWindow = initiatorDocument->domWindow()) | 188 if (LocalDOMWindow* initiatorWindow = initiatorDocument->domWindow()) |
| 186 initiatorWindow->performance().addResourceTiming(*info, initiatorDocumen
t); | 189 initiatorWindow->performance().addResourceTiming(*info, initiatorDocumen
t); |
| 187 } | 190 } |
| 188 | 191 |
| 189 static ResourceRequest::TargetType requestTargetType(const ResourceFetcher* fetc
her, const ResourceRequest& request, Resource::Type type) | 192 static WebURLRequest::RequestContext requestContextFromType(const ResourceFetche
r* fetcher, Resource::Type type) |
| 190 { | 193 { |
| 191 switch (type) { | 194 switch (type) { |
| 192 case Resource::MainResource: | 195 case Resource::MainResource: |
| 193 if (fetcher->frame()->tree().parent()) | 196 if (fetcher->frame()->tree().parent()) |
| 194 return ResourceRequest::TargetIsSubframe; | 197 return WebURLRequest::RequestContextChildDocument; |
| 195 return ResourceRequest::TargetIsMainFrame; | 198 return WebURLRequest::RequestContextDocument; |
| 196 case Resource::XSLStyleSheet: | 199 case Resource::XSLStyleSheet: |
| 197 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 200 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
| 198 case Resource::CSSStyleSheet: | 201 case Resource::CSSStyleSheet: |
| 199 return ResourceRequest::TargetIsStyleSheet; | 202 return WebURLRequest::RequestContextStyle; |
| 200 case Resource::Script: | 203 case Resource::Script: |
| 201 return ResourceRequest::TargetIsScript; | 204 return WebURLRequest::RequestContextScript; |
| 202 case Resource::Font: | 205 case Resource::Font: |
| 203 return ResourceRequest::TargetIsFont; | 206 return WebURLRequest::RequestContextFont; |
| 204 case Resource::Image: | 207 case Resource::Image: |
| 205 return ResourceRequest::TargetIsImage; | 208 return WebURLRequest::RequestContextImage; |
| 206 case Resource::Raw: | 209 case Resource::Raw: |
| 210 return WebURLRequest::RequestContextSubresource; |
| 207 case Resource::ImportResource: | 211 case Resource::ImportResource: |
| 208 return ResourceRequest::TargetIsSubresource; | 212 return WebURLRequest::RequestContextScript; |
| 209 case Resource::LinkPrefetch: | 213 case Resource::LinkPrefetch: |
| 210 return ResourceRequest::TargetIsPrefetch; | 214 return WebURLRequest::RequestContextPrefetch; |
| 211 case Resource::LinkSubresource: | 215 case Resource::LinkSubresource: |
| 212 return ResourceRequest::TargetIsSubresource; | 216 return WebURLRequest::RequestContextSubresource; |
| 213 case Resource::TextTrack: | 217 case Resource::TextTrack: |
| 214 return ResourceRequest::TargetIsTextTrack; | 218 return WebURLRequest::RequestContextTextTrack; |
| 215 case Resource::SVGDocument: | 219 case Resource::SVGDocument: |
| 216 return ResourceRequest::TargetIsImage; | 220 return WebURLRequest::RequestContextImage; |
| 217 case Resource::Media: | 221 case Resource::Media: // TODO: Split this. |
| 218 return ResourceRequest::TargetIsMedia; | 222 return WebURLRequest::RequestContextVideo; |
| 219 } | 223 } |
| 220 ASSERT_NOT_REACHED(); | 224 ASSERT_NOT_REACHED(); |
| 221 return ResourceRequest::TargetIsSubresource; | 225 return WebURLRequest::RequestContextSubresource; |
| 222 } | 226 } |
| 223 | 227 |
| 224 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) | 228 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) |
| 225 : m_document(nullptr) | 229 : m_document(nullptr) |
| 226 , m_documentLoader(documentLoader) | 230 , m_documentLoader(documentLoader) |
| 227 , m_requestCount(0) | 231 , m_requestCount(0) |
| 228 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl
ectDocumentResourcesTimerFired) | 232 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl
ectDocumentResourcesTimerFired) |
| 229 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) | 233 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) |
| 230 , m_autoLoadImages(true) | 234 , m_autoLoadImages(true) |
| 231 , m_imagesEnabled(true) | 235 , m_imagesEnabled(true) |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; | 775 HashMap<RefPtr<ResourceTimingInfo>, bool> timingReports; |
| 772 timingReports.swap(m_scheduledResourceTimingReports); | 776 timingReports.swap(m_scheduledResourceTimingReports); |
| 773 HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator end = timingReports.end(
); | 777 HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator end = timingReports.end(
); |
| 774 for (HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator it = timingReports.
begin(); it != end; ++it) { | 778 for (HashMap<RefPtr<ResourceTimingInfo>, bool>::iterator it = timingReports.
begin(); it != end; ++it) { |
| 775 RefPtr<ResourceTimingInfo> info = it->key; | 779 RefPtr<ResourceTimingInfo> info = it->key; |
| 776 bool isMainResource = it->value; | 780 bool isMainResource = it->value; |
| 777 reportResourceTiming(info.get(), document(), isMainResource); | 781 reportResourceTiming(info.get(), document(), isMainResource); |
| 778 } | 782 } |
| 779 } | 783 } |
| 780 | 784 |
| 781 void ResourceFetcher::determineTargetType(ResourceRequest& request, Resource::Ty
pe type) | 785 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type) |
| 782 { | 786 { |
| 783 ResourceRequest::TargetType targetType = requestTargetType(this, request, ty
pe); | 787 WebURLRequest::RequestContext requestContext = requestContextFromType(this,
type); |
| 784 request.setTargetType(targetType); | 788 request.setRequestContext(requestContext); |
| 785 } | 789 } |
| 786 | 790 |
| 787 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) | 791 ResourceRequestCachePolicy ResourceFetcher::resourceRequestCachePolicy(const Res
ourceRequest& request, Resource::Type type) |
| 788 { | 792 { |
| 789 if (type == Resource::MainResource) { | 793 if (type == Resource::MainResource) { |
| 790 FrameLoadType frameLoadType = frame()->loader().loadType(); | 794 FrameLoadType frameLoadType = frame()->loader().loadType(); |
| 791 if (request.httpMethod() == "POST" && frameLoadType == FrameLoadTypeBack
Forward) | 795 if (request.httpMethod() == "POST" && frameLoadType == FrameLoadTypeBack
Forward) |
| 792 return ReturnCacheDataDontLoad; | 796 return ReturnCacheDataDontLoad; |
| 793 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) | 797 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) |
| 794 return ReturnCacheDataElseLoad; | 798 return ReturnCacheDataElseLoad; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 816 return UseProtocolCachePolicy; | 820 return UseProtocolCachePolicy; |
| 817 } | 821 } |
| 818 | 822 |
| 819 void ResourceFetcher::addAdditionalRequestHeaders(ResourceRequest& request, Reso
urce::Type type) | 823 void ResourceFetcher::addAdditionalRequestHeaders(ResourceRequest& request, Reso
urce::Type type) |
| 820 { | 824 { |
| 821 if (!frame()) | 825 if (!frame()) |
| 822 return; | 826 return; |
| 823 | 827 |
| 824 if (request.cachePolicy() == UseProtocolCachePolicy) | 828 if (request.cachePolicy() == UseProtocolCachePolicy) |
| 825 request.setCachePolicy(resourceRequestCachePolicy(request, type)); | 829 request.setCachePolicy(resourceRequestCachePolicy(request, type)); |
| 826 if (request.targetType() == ResourceRequest::TargetIsUnspecified) | 830 if (request.requestContext() == WebURLRequest::RequestContextUnspecified) |
| 827 determineTargetType(request, type); | 831 determineRequestContext(request, type); |
| 828 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) | 832 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) |
| 829 request.setHTTPHeaderField("Purpose", "prefetch"); | 833 request.setHTTPHeaderField("Purpose", "prefetch"); |
| 830 | 834 |
| 831 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); | 835 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); |
| 832 } | 836 } |
| 833 | 837 |
| 834 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
Request& request, Resource* resource) | 838 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
Request& request, Resource* resource) |
| 835 { | 839 { |
| 836 ASSERT(resource); | 840 ASSERT(resource); |
| 837 ASSERT(memoryCache()->contains(resource)); | 841 ASSERT(memoryCache()->contains(resource)); |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1489 } | 1493 } |
| 1490 } | 1494 } |
| 1491 | 1495 |
| 1492 void ResourceFetcher::trace(Visitor* visitor) | 1496 void ResourceFetcher::trace(Visitor* visitor) |
| 1493 { | 1497 { |
| 1494 visitor->trace(m_document); | 1498 visitor->trace(m_document); |
| 1495 ResourceLoaderHost::trace(visitor); | 1499 ResourceLoaderHost::trace(visitor); |
| 1496 } | 1500 } |
| 1497 | 1501 |
| 1498 } | 1502 } |
| OLD | NEW |