Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp

Issue 2487763003: [ImageLoader 2d] Set DecodeError by calling ResourceLoader::cancel()
Patch Set: Rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.h ('k') | third_party/WebKit/Source/core/fetch/ResourceLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698