| 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 | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
| 6 rights reserved. | 6 rights reserved. |
| 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 8 | 8 |
| 9 This library is free software; you can redistribute it and/or | 9 This library is free software; you can redistribute it and/or |
| 10 modify it under the terms of the GNU Library General Public | 10 modify it under the terms of the GNU Library General Public |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 memoryCache()->add(resource); | 432 memoryCache()->add(resource); |
| 433 | 433 |
| 434 return resource; | 434 return resource; |
| 435 } | 435 } |
| 436 | 436 |
| 437 Resource* ResourceFetcher::resourceForBlockedRequest( | 437 Resource* ResourceFetcher::resourceForBlockedRequest( |
| 438 const FetchRequest& request, | 438 const FetchRequest& request, |
| 439 const ResourceFactory& factory) { | 439 const ResourceFactory& factory) { |
| 440 Resource* resource = factory.create(request.resourceRequest(), | 440 Resource* resource = factory.create(request.resourceRequest(), |
| 441 request.options(), request.charset()); | 441 request.options(), request.charset()); |
| 442 resource->error(ResourceError::cancelledDueToAccessCheckError(request.url())); | 442 resource->error(ResourceError::cancelledDueToAccessCheckError(request.url()), |
| 443 Resource::LoadError); |
| 443 return resource; | 444 return resource; |
| 444 } | 445 } |
| 445 | 446 |
| 446 void ResourceFetcher::moveCachedNonBlockingResourceToBlocking( | 447 void ResourceFetcher::moveCachedNonBlockingResourceToBlocking( |
| 447 Resource* resource, | 448 Resource* resource, |
| 448 const FetchRequest& request) { | 449 const FetchRequest& request) { |
| 449 // TODO(yoav): Test that non-blocking resources (video/audio/track) continue | 450 // TODO(yoav): Test that non-blocking resources (video/audio/track) continue |
| 450 // to not-block even after being preloaded and discovered. | 451 // to not-block even after being preloaded and discovered. |
| 451 if (resource && resource->loader() && | 452 if (resource && resource->loader() && |
| 452 resource->isLoadEventBlockingResourceType() && | 453 resource->isLoadEventBlockingResourceType() && |
| (...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 resource->finish(finishTime); | 1163 resource->finish(finishTime); |
| 1163 context().didLoadResource(resource); | 1164 context().didLoadResource(resource); |
| 1164 | 1165 |
| 1165 if (resource->isImage() && | 1166 if (resource->isImage() && |
| 1166 toImageResource(resource)->shouldReloadBrokenPlaceholder()) { | 1167 toImageResource(resource)->shouldReloadBrokenPlaceholder()) { |
| 1167 toImageResource(resource)->reloadIfLoFiOrPlaceholder(this); | 1168 toImageResource(resource)->reloadIfLoFiOrPlaceholder(this); |
| 1168 } | 1169 } |
| 1169 } | 1170 } |
| 1170 | 1171 |
| 1171 void ResourceFetcher::didFailLoading(Resource* resource, | 1172 void ResourceFetcher::didFailLoading(Resource* resource, |
| 1172 const ResourceError& error) { | 1173 const ResourceError& error, |
| 1174 Resource::Status errorStatus) { |
| 1173 TRACE_EVENT_ASYNC_END0("blink.net", "Resource", resource->identifier()); | 1175 TRACE_EVENT_ASYNC_END0("blink.net", "Resource", resource->identifier()); |
| 1174 removeResourceLoader(resource->loader()); | 1176 removeResourceLoader(resource->loader()); |
| 1175 m_resourceTimingInfoMap.take(const_cast<Resource*>(resource)); | 1177 m_resourceTimingInfoMap.take(const_cast<Resource*>(resource)); |
| 1176 bool isInternalRequest = resource->options().initiatorInfo.name == | 1178 bool isInternalRequest = resource->options().initiatorInfo.name == |
| 1177 FetchInitiatorTypeNames::internal; | 1179 FetchInitiatorTypeNames::internal; |
| 1178 context().dispatchDidFail(resource->identifier(), error, isInternalRequest); | 1180 context().dispatchDidFail(resource->identifier(), error, isInternalRequest, |
| 1179 resource->error(error); | 1181 errorStatus == Resource::DecodeError); |
| 1182 resource->error(error, errorStatus); |
| 1180 context().didLoadResource(resource); | 1183 context().didLoadResource(resource); |
| 1181 | 1184 |
| 1182 if (resource->isImage() && | 1185 if (resource->isImage() && |
| 1183 toImageResource(resource)->shouldReloadBrokenPlaceholder()) { | 1186 toImageResource(resource)->shouldReloadBrokenPlaceholder()) { |
| 1184 toImageResource(resource)->reloadIfLoFiOrPlaceholder(this); | 1187 toImageResource(resource)->reloadIfLoFiOrPlaceholder(this); |
| 1185 } | 1188 } |
| 1186 } | 1189 } |
| 1187 | 1190 |
| 1188 void ResourceFetcher::didReceiveResponse(Resource* resource, | 1191 void ResourceFetcher::didReceiveResponse(Resource* resource, |
| 1189 const ResourceResponse& response, | 1192 const ResourceResponse& response, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1214 // If the response is fetched via ServiceWorker, the original URL of the | 1217 // If the response is fetched via ServiceWorker, the original URL of the |
| 1215 // response could be different from the URL of the request. We check the URL | 1218 // response could be different from the URL of the request. We check the URL |
| 1216 // not to load the resources which are forbidden by the page CSP. | 1219 // not to load the resources which are forbidden by the page CSP. |
| 1217 // https://w3c.github.io/webappsec-csp/#should-block-response | 1220 // https://w3c.github.io/webappsec-csp/#should-block-response |
| 1218 const KURL& originalURL = response.originalURLViaServiceWorker(); | 1221 const KURL& originalURL = response.originalURLViaServiceWorker(); |
| 1219 if (!originalURL.isEmpty() && | 1222 if (!originalURL.isEmpty() && |
| 1220 !context().allowResponse(resource->getType(), | 1223 !context().allowResponse(resource->getType(), |
| 1221 resource->resourceRequest(), originalURL, | 1224 resource->resourceRequest(), originalURL, |
| 1222 resource->options())) { | 1225 resource->options())) { |
| 1223 resource->loader()->didFail( | 1226 resource->loader()->didFail( |
| 1224 ResourceError::cancelledDueToAccessCheckError(originalURL)); | 1227 ResourceError::cancelledDueToAccessCheckError(originalURL), |
| 1228 Resource::LoadError); |
| 1225 return; | 1229 return; |
| 1226 } | 1230 } |
| 1227 } else if (resource->options().corsEnabled == IsCORSEnabled && | 1231 } else if (resource->options().corsEnabled == IsCORSEnabled && |
| 1228 !canAccessResponse(resource, response)) { | 1232 !canAccessResponse(resource, response)) { |
| 1229 resource->loader()->didFail( | 1233 resource->loader()->didFail( |
| 1230 ResourceError::cancelledDueToAccessCheckError(response.url())); | 1234 ResourceError::cancelledDueToAccessCheckError(response.url()), |
| 1235 Resource::LoadError); |
| 1231 return; | 1236 return; |
| 1232 } | 1237 } |
| 1233 | 1238 |
| 1234 context().dispatchDidReceiveResponse( | 1239 context().dispatchDidReceiveResponse( |
| 1235 resource->identifier(), response, resource->resourceRequest().frameType(), | 1240 resource->identifier(), response, resource->resourceRequest().frameType(), |
| 1236 resource->resourceRequest().requestContext(), resource); | 1241 resource->resourceRequest().requestContext(), resource); |
| 1237 resource->responseReceived(response, std::move(handle)); | 1242 resource->responseReceived(response, std::move(handle)); |
| 1238 if (resource->loader() && response.httpStatusCode() >= 400 && | 1243 if (resource->loader() && response.httpStatusCode() >= 400 && |
| 1239 !resource->shouldIgnoreHTTPStatusCodeErrors()) { | 1244 !resource->shouldIgnoreHTTPStatusCodeErrors()) { |
| 1240 resource->loader()->didFail(ResourceError::cancelledError(response.url())); | 1245 resource->loader()->didFail(ResourceError::cancelledError(response.url()), |
| 1246 Resource::LoadError); |
| 1241 } | 1247 } |
| 1242 } | 1248 } |
| 1243 | 1249 |
| 1244 void ResourceFetcher::didReceiveData(const Resource* resource, | 1250 void ResourceFetcher::didReceiveData(const Resource* resource, |
| 1245 const char* data, | 1251 const char* data, |
| 1246 int dataLength, | 1252 int dataLength, |
| 1247 int encodedDataLength) { | 1253 int encodedDataLength) { |
| 1248 context().dispatchDidReceiveData(resource->identifier(), data, dataLength, | 1254 context().dispatchDidReceiveData(resource->identifier(), data, dataLength, |
| 1249 encodedDataLength); | 1255 encodedDataLength); |
| 1250 } | 1256 } |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1625 visitor->trace(m_context); | 1631 visitor->trace(m_context); |
| 1626 visitor->trace(m_archive); | 1632 visitor->trace(m_archive); |
| 1627 visitor->trace(m_loaders); | 1633 visitor->trace(m_loaders); |
| 1628 visitor->trace(m_nonBlockingLoaders); | 1634 visitor->trace(m_nonBlockingLoaders); |
| 1629 visitor->trace(m_documentResources); | 1635 visitor->trace(m_documentResources); |
| 1630 visitor->trace(m_preloads); | 1636 visitor->trace(m_preloads); |
| 1631 visitor->trace(m_resourceTimingInfoMap); | 1637 visitor->trace(m_resourceTimingInfoMap); |
| 1632 } | 1638 } |
| 1633 | 1639 |
| 1634 } // namespace blink | 1640 } // namespace blink |
| OLD | NEW |