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 13 matching lines...) Expand all Loading... |
24 pages from the web. It has a memory cache for these objects. | 24 pages from the web. It has a memory cache for these objects. |
25 */ | 25 */ |
26 | 26 |
27 #include "config.h" | 27 #include "config.h" |
28 #include "core/loader/cache/CachedResourceLoader.h" | 28 #include "core/loader/cache/CachedResourceLoader.h" |
29 | 29 |
30 #include "bindings/v8/ScriptController.h" | 30 #include "bindings/v8/ScriptController.h" |
31 #include "core/dom/Document.h" | 31 #include "core/dom/Document.h" |
32 #include "core/html/HTMLElement.h" | 32 #include "core/html/HTMLElement.h" |
33 #include "core/html/HTMLFrameOwnerElement.h" | 33 #include "core/html/HTMLFrameOwnerElement.h" |
| 34 #include "core/inspector/InspectorInstrumentation.h" |
34 #include "core/loader/DocumentLoader.h" | 35 #include "core/loader/DocumentLoader.h" |
35 #include "core/loader/FrameLoader.h" | 36 #include "core/loader/FrameLoader.h" |
36 #include "core/loader/FrameLoaderClient.h" | 37 #include "core/loader/FrameLoaderClient.h" |
37 #include "core/loader/PingLoader.h" | 38 #include "core/loader/PingLoader.h" |
38 #include "core/loader/UniqueIdentifier.h" | 39 #include "core/loader/UniqueIdentifier.h" |
| 40 #include "core/loader/appcache/ApplicationCacheHost.h" |
39 #include "core/loader/cache/CachedCSSStyleSheet.h" | 41 #include "core/loader/cache/CachedCSSStyleSheet.h" |
40 #include "core/loader/cache/CachedDocument.h" | 42 #include "core/loader/cache/CachedDocument.h" |
41 #include "core/loader/cache/CachedFont.h" | 43 #include "core/loader/cache/CachedFont.h" |
42 #include "core/loader/cache/CachedImage.h" | 44 #include "core/loader/cache/CachedImage.h" |
43 #include "core/loader/cache/CachedRawResource.h" | 45 #include "core/loader/cache/CachedRawResource.h" |
44 #include "core/loader/cache/CachedResourceRequest.h" | 46 #include "core/loader/cache/CachedResourceRequest.h" |
45 #include "core/loader/cache/CachedScript.h" | 47 #include "core/loader/cache/CachedScript.h" |
46 #include "core/loader/cache/CachedShader.h" | 48 #include "core/loader/cache/CachedShader.h" |
47 #include "core/loader/cache/CachedTextTrack.h" | 49 #include "core/loader/cache/CachedTextTrack.h" |
48 #include "core/loader/cache/CachedXSLStyleSheet.h" | 50 #include "core/loader/cache/CachedXSLStyleSheet.h" |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 if (priority != resource->resourceRequest().priority()) { | 498 if (priority != resource->resourceRequest().priority()) { |
497 resource->resourceRequest().setPriority(priority); | 499 resource->resourceRequest().setPriority(priority); |
498 resource->didChangePriority(priority); | 500 resource->didChangePriority(priority); |
499 } | 501 } |
500 } | 502 } |
501 | 503 |
502 if ((policy != Use || resource->stillNeedsLoad()) && CachedResourceRequest::
NoDefer == request.defer()) { | 504 if ((policy != Use || resource->stillNeedsLoad()) && CachedResourceRequest::
NoDefer == request.defer()) { |
503 if (!frame()) | 505 if (!frame()) |
504 return 0; | 506 return 0; |
505 | 507 |
506 FrameLoader* frameLoader = frame()->loader(); | 508 FrameLoader* frameLoader = this->frameLoader(); |
507 if (request.options().securityCheck == DoSecurityCheck && (frameLoader->
state() == FrameStateProvisional || !frameLoader->activeDocumentLoader() || fram
eLoader->activeDocumentLoader()->isStopping())) | 509 if (request.options().securityCheck == DoSecurityCheck && (frameLoader->
state() == FrameStateProvisional || !frameLoader->activeDocumentLoader() || fram
eLoader->activeDocumentLoader()->isStopping())) |
508 return 0; | 510 return 0; |
509 | 511 |
510 if (!m_documentLoader->scheduleArchiveLoad(resource.get(), request.resou
rceRequest())) | 512 if (!m_documentLoader->scheduleArchiveLoad(resource.get(), request.resou
rceRequest())) |
511 resource->load(this, request.options()); | 513 resource->load(this, request.options()); |
512 | 514 |
513 // We don't support immediate loads, but we do support immediate failure
. | 515 // We don't support immediate loads, but we do support immediate failure
. |
514 if (resource->errorOccurred()) { | 516 if (resource->errorOccurred()) { |
515 if (resource->inCache()) | 517 if (resource->inCache()) |
516 memoryCache()->remove(resource.get()); | 518 memoryCache()->remove(resource.get()); |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
889 return CachePolicyVerify; | 891 return CachePolicyVerify; |
890 | 892 |
891 if (type != CachedResource::MainResource) | 893 if (type != CachedResource::MainResource) |
892 return frame()->loader()->subresourceCachePolicy(); | 894 return frame()->loader()->subresourceCachePolicy(); |
893 | 895 |
894 if (frame()->loader()->loadType() == FrameLoadTypeReloadFromOrigin || frame(
)->loader()->loadType() == FrameLoadTypeReload) | 896 if (frame()->loader()->loadType() == FrameLoadTypeReloadFromOrigin || frame(
)->loader()->loadType() == FrameLoadTypeReload) |
895 return CachePolicyReload; | 897 return CachePolicyReload; |
896 return CachePolicyVerify; | 898 return CachePolicyVerify; |
897 } | 899 } |
898 | 900 |
899 void CachedResourceLoader::loadDone(CachedResource* resource) | 901 void CachedResourceLoader::didLoadResource(CachedResource* resource) |
900 { | 902 { |
901 RefPtr<DocumentLoader> protectDocumentLoader(m_documentLoader); | 903 RefPtr<DocumentLoader> protectDocumentLoader(m_documentLoader); |
902 RefPtr<Document> protectDocument(m_document); | 904 RefPtr<Document> protectDocument(m_document); |
903 | 905 |
904 if (resource && resource->response().isHTTP() && ((!resource->errorOccurred(
) && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304))
{ | 906 if (resource && resource->response().isHTTP() && ((!resource->errorOccurred(
) && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304))
{ |
905 HashMap<CachedResource*, CachedResourceInitiatorInfo>::iterator initiato
rIt = m_initiatorMap.find(resource); | 907 HashMap<CachedResource*, CachedResourceInitiatorInfo>::iterator initiato
rIt = m_initiatorMap.find(resource); |
906 if (initiatorIt != m_initiatorMap.end()) { | 908 if (initiatorIt != m_initiatorMap.end()) { |
907 ASSERT(document()); | 909 ASSERT(document()); |
908 Document* initiatorDocument = document(); | 910 Document* initiatorDocument = document(); |
909 if (resource->type() == CachedResource::MainResource) | 911 if (resource->type() == CachedResource::MainResource) |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1073 memoryCache()->remove(res); | 1075 memoryCache()->remove(res); |
1074 } | 1076 } |
1075 m_preloads.clear(); | 1077 m_preloads.clear(); |
1076 } | 1078 } |
1077 | 1079 |
1078 void CachedResourceLoader::clearPendingPreloads() | 1080 void CachedResourceLoader::clearPendingPreloads() |
1079 { | 1081 { |
1080 m_pendingPreloads.clear(); | 1082 m_pendingPreloads.clear(); |
1081 } | 1083 } |
1082 | 1084 |
| 1085 inline FrameLoader* CachedResourceLoader::frameLoader() |
| 1086 { |
| 1087 return frame() ? frame()->loader() : 0; |
| 1088 } |
| 1089 |
| 1090 void CachedResourceLoader::didFinishLoading(const CachedResource* resource, doub
le finishTime, const ResourceLoaderOptions& options) |
| 1091 { |
| 1092 if (options.sendLoadCallbacks != SendCallbacks) |
| 1093 return; |
| 1094 if (FrameLoader* loader = frameLoader()) |
| 1095 loader->notifier()->dispatchDidFinishLoading(m_documentLoader, resource-
>identifier(), finishTime); |
| 1096 } |
| 1097 |
| 1098 void CachedResourceLoader::didChangeLoadingPriority(const CachedResource* resour
ce, ResourceLoadPriority loadPriority) |
| 1099 { |
| 1100 if (FrameLoader* loader = frameLoader()) |
| 1101 loader->client()->dispatchDidChangeResourcePriority(resource->identifier
(), loadPriority); |
| 1102 } |
| 1103 |
| 1104 void CachedResourceLoader::didFailLoading(const CachedResource* resource, const
ResourceError& error, const ResourceLoaderOptions& options) |
| 1105 { |
| 1106 if (options.sendLoadCallbacks != SendCallbacks) |
| 1107 return; |
| 1108 if (FrameLoader* loader = frameLoader()) |
| 1109 loader->notifier()->dispatchDidFail(m_documentLoader, resource->identifi
er(), error); |
| 1110 } |
| 1111 |
| 1112 void CachedResourceLoader::willSendRequest(const CachedResource* resource, Resou
rceRequest& request, const ResourceResponse& redirectResponse, const ResourceLoa
derOptions& options) |
| 1113 { |
| 1114 if (options.sendLoadCallbacks == SendCallbacks) { |
| 1115 if (FrameLoader* loader = frameLoader()) |
| 1116 loader->notifier()->dispatchWillSendRequest(m_documentLoader, resour
ce->identifier(), request, redirectResponse, options.initiatorInfo); |
| 1117 } else { |
| 1118 InspectorInstrumentation::willSendRequest(frame(), resource->identifier(
), m_documentLoader, request, redirectResponse, options.initiatorInfo); |
| 1119 } |
| 1120 } |
| 1121 |
| 1122 void CachedResourceLoader::didReceiveResponse(const CachedResource* resource, co
nst ResourceResponse& response, const ResourceLoaderOptions& options) |
| 1123 { |
| 1124 if (options.sendLoadCallbacks != SendCallbacks) |
| 1125 return; |
| 1126 if (FrameLoader* loader = frameLoader()) |
| 1127 loader->notifier()->dispatchDidReceiveResponse(m_documentLoader, resourc
e->identifier(), response); |
| 1128 } |
| 1129 |
| 1130 void CachedResourceLoader::didReceiveData(const CachedResource* resource, const
char* data, int dataLength, int encodedDataLength, const ResourceLoaderOptions&
options) |
| 1131 { |
| 1132 if (options.sendLoadCallbacks != SendCallbacks) |
| 1133 return; |
| 1134 if (FrameLoader* loader = frameLoader()) |
| 1135 loader->notifier()->dispatchDidReceiveData(m_documentLoader, resource->i
dentifier(), data, dataLength, encodedDataLength); |
| 1136 } |
| 1137 |
| 1138 ResourceError CachedResourceLoader::cancelledLoadingError(const ResourceRequest&
request) |
| 1139 { |
| 1140 if (FrameLoader* loader = frameLoader()) |
| 1141 return loader->cancelledError(request); |
| 1142 return ResourceError(String(), 0, String(), String()); |
| 1143 } |
| 1144 |
| 1145 ResourceError CachedResourceLoader::cannotShowURLLoadingError(const ResourceRequ
est& request) |
| 1146 { |
| 1147 if (FrameLoader* loader = frameLoader()) |
| 1148 return loader->cancelledError(request); |
| 1149 return ResourceError(String(), 0, String(), String()); |
| 1150 } |
| 1151 |
| 1152 void CachedResourceLoader::subresourceLoaderFinishedLoadingOnePart(ResourceLoade
r* loader) |
| 1153 { |
| 1154 if (m_documentLoader) |
| 1155 m_documentLoader->subresourceLoaderFinishedLoadingOnePart(loader); |
| 1156 } |
| 1157 |
| 1158 void CachedResourceLoader::didInitializeResourceLoader(ResourceLoader* loader) |
| 1159 { |
| 1160 if (m_documentLoader) |
| 1161 m_documentLoader->addResourceLoader(loader); |
| 1162 } |
| 1163 |
| 1164 void CachedResourceLoader::willTerminateResourceLoader(ResourceLoader* loader) |
| 1165 { |
| 1166 if (m_documentLoader) |
| 1167 m_documentLoader->removeResourceLoader(loader); |
| 1168 } |
| 1169 |
| 1170 void CachedResourceLoader::willStartLoadingResource(ResourceRequest& request) |
| 1171 { |
| 1172 if (m_documentLoader) |
| 1173 m_documentLoader->applicationCacheHost()->willStartLoadingResource(reque
st); |
| 1174 } |
| 1175 |
| 1176 bool CachedResourceLoader::defersLoading() const |
| 1177 { |
| 1178 if (Frame* frame = this->frame()) |
| 1179 return frame->page()->defersLoading(); |
| 1180 return false; |
| 1181 } |
| 1182 |
| 1183 bool CachedResourceLoader::isLoadedBy(CachedResourceLoader* possibleOwner) const |
| 1184 { |
| 1185 return this == possibleOwner; |
| 1186 } |
| 1187 |
| 1188 bool CachedResourceLoader::shouldRequest(CachedResource* resource, const Resourc
eRequest& request, const ResourceLoaderOptions& options) |
| 1189 { |
| 1190 if (!canRequest(resource->type(), request.url(), options)) |
| 1191 return false; |
| 1192 if (resource->type() == CachedResource::ImageResource && shouldDeferImageLoa
d(request.url())) |
| 1193 return false; |
| 1194 return true; |
| 1195 } |
| 1196 |
| 1197 Frame* CachedResourceLoader::inspectedFrame() const |
| 1198 { |
| 1199 // FIXME: return frame of master document for imported documents. |
| 1200 return m_documentLoader ? m_documentLoader->frame() : 0; |
| 1201 } |
| 1202 |
| 1203 void CachedResourceLoader::refResourceLoaderHost() |
| 1204 { |
| 1205 ref(); |
| 1206 } |
| 1207 |
| 1208 void CachedResourceLoader::derefResourceLoaderHost() |
| 1209 { |
| 1210 deref(); |
| 1211 } |
| 1212 |
1083 #if PRELOAD_DEBUG | 1213 #if PRELOAD_DEBUG |
1084 void CachedResourceLoader::printPreloadStats() | 1214 void CachedResourceLoader::printPreloadStats() |
1085 { | 1215 { |
1086 unsigned scripts = 0; | 1216 unsigned scripts = 0; |
1087 unsigned scriptMisses = 0; | 1217 unsigned scriptMisses = 0; |
1088 unsigned stylesheets = 0; | 1218 unsigned stylesheets = 0; |
1089 unsigned stylesheetMisses = 0; | 1219 unsigned stylesheetMisses = 0; |
1090 unsigned images = 0; | 1220 unsigned images = 0; |
1091 unsigned imageMisses = 0; | 1221 unsigned imageMisses = 0; |
1092 ListHashSet<CachedResource*>::iterator end = m_preloads.end(); | 1222 ListHashSet<CachedResource*>::iterator end = m_preloads.end(); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume
ntResourcesTimer"); | 1271 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume
ntResourcesTimer"); |
1142 } | 1272 } |
1143 | 1273 |
1144 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions(
) | 1274 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions(
) |
1145 { | 1275 { |
1146 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); | 1276 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); |
1147 return options; | 1277 return options; |
1148 } | 1278 } |
1149 | 1279 |
1150 } | 1280 } |
OLD | NEW |