Index: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
index 12c78352ede958dd95cde409aff7f040f920d9c2..5ee5b95911dde52b33844107523d68ed59f8bbc8 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp |
@@ -1149,6 +1149,18 @@ void ResourceFetcher::didFinishLoading(Resource* resource, |
void ResourceFetcher::didFailLoading(Resource* resource, |
const ResourceError& error) { |
+ if (resource->resourceRequest().isCacheAwareLoadingActivated() && |
+ !error.isCancellation() && !error.isAccessCheck()) { |
+ // Assume error.errorCode() == net::ERR_CACHE_MISS, resend request with |
+ // existing ResourceLoader. |
+ resource->deactivateCacheAwareLoading(); |
+ resource->willReloadAfterDiskCacheMiss(); |
+ resource->loader()->start(resource->resourceRequest(), |
+ context().loadingTaskRunner(), |
+ context().defersLoading()); |
+ return; |
+ } |
+ |
TRACE_EVENT_ASYNC_END0("blink.net", "Resource", resource->identifier()); |
removeResourceLoader(resource->loader()); |
m_resourceTimingInfoMap.take(const_cast<Resource*>(resource)); |
@@ -1262,6 +1274,9 @@ bool ResourceFetcher::startLoad(Resource* resource) { |
if (sourceOrigin && sourceOrigin->hasSuborigin()) |
request.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All); |
+ // TODO(632580): Workaround to persist cache-aware state, remove after fixed. |
+ resource->setResourceRequest(request); |
+ |
ResourceLoader* loader = ResourceLoader::create(this, resource); |
if (resource->shouldBlockLoadEvent()) |
m_loaders.add(loader); |
@@ -1368,6 +1383,7 @@ void ResourceFetcher::willSendRequest(unsigned long identifier, |
const ResourceLoaderOptions& options) { |
context().dispatchWillSendRequest(identifier, newRequest, redirectResponse, |
options.initiatorInfo); |
+ newRequest.mayActivateCacheAwareLoading(); |
} |
void ResourceFetcher::updateAllImageResourcePriorities() { |