| 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 05af9497195ce3039210d337f13a1f1aa7ffb4e9..89d9c97a27a3203333a9dd9f3e58755611259863 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -101,6 +101,19 @@ bool IsCrossOrigin(const KURL& a, const KURL& b) {
|
| return !originB->isSameSchemeHostPort(originA.get());
|
| }
|
|
|
| +void mayActivateCacheAwareLoading(ResourceRequest& request) {
|
| + switch (request.getCachePolicy()) {
|
| + case WebCachePolicy::BypassingCache:
|
| + case WebCachePolicy::ReturnCacheDataDontLoad:
|
| + return;
|
| + case WebCachePolicy::UseProtocolCachePolicy:
|
| + case WebCachePolicy::ValidatingCacheData:
|
| + case WebCachePolicy::ReturnCacheDataElseLoad:
|
| + break;
|
| + }
|
| + request.activateCacheAwareLoading();
|
| +}
|
| +
|
| } // namespace
|
|
|
| static void RecordSriResourceIntegrityMismatchEvent(
|
| @@ -722,6 +735,9 @@ Resource* ResourceFetcher::createResourceForLoading(
|
| RESOURCE_LOADING_DVLOG(1) << "Loading Resource for "
|
| << request.resourceRequest().url().elidedString();
|
|
|
| + if (request.isCacheAwareLoadingEnabled())
|
| + mayActivateCacheAwareLoading(request.mutableResourceRequest());
|
| +
|
| Resource* resource =
|
| factory.create(request.resourceRequest(), request.options(), charset);
|
| resource->setLinkPreload(request.isLinkPreload());
|
| @@ -1113,6 +1129,9 @@ void ResourceFetcher::didFinishLoading(Resource* resource,
|
| TRACE_EVENT_ASYNC_END0("blink.net", "Resource", resource->identifier());
|
| DCHECK(resource);
|
|
|
| + if (resource->resourceRequest().isCacheAwareLoadingActivated())
|
| + resource->deactivateCacheAwareLoading();
|
| +
|
| // When loading a multipart resource, make the loader non-block when finishing
|
| // loading the first part.
|
| if (finishReason == DidFinishFirstPartInMultipart)
|
| @@ -1160,6 +1179,16 @@ void ResourceFetcher::didFinishLoading(Resource* resource,
|
|
|
| void ResourceFetcher::didFailLoading(Resource* resource,
|
| const ResourceError& error) {
|
| + if (resource->resourceRequest().isCacheAwareLoadingActivated() &&
|
| + error.isCacheMiss()) {
|
| + 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));
|
| @@ -1273,6 +1302,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);
|
|
|