| Index: third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
|
| index c9e4d3c4ad80eeea93dee39b13d3bad95bea8aac..189ab4a06002ccf8d4b11b6dca655e4c0fa52598 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
|
| @@ -54,7 +54,9 @@ ResourceLoader* ResourceLoader::create(ResourceFetcher* fetcher,
|
| }
|
|
|
| ResourceLoader::ResourceLoader(ResourceFetcher* fetcher, Resource* resource)
|
| - : m_fetcher(fetcher), m_resource(resource) {
|
| + : m_fetcher(fetcher),
|
| + m_resource(resource),
|
| + m_isCacheAwareLoadingActivated(false) {
|
| DCHECK(m_resource);
|
| DCHECK(m_fetcher);
|
| m_resource->setLoader(this);
|
| @@ -69,7 +71,7 @@ DEFINE_TRACE(ResourceLoader) {
|
| visitor->trace(m_resource);
|
| }
|
|
|
| -void ResourceLoader::start(const ResourceRequest& request,
|
| +void ResourceLoader::start(const ResourceRequest& originalRequest,
|
| WebTaskRunner* loadingTaskRunner,
|
| bool defersLoading) {
|
| DCHECK(!m_loader);
|
| @@ -79,6 +81,15 @@ void ResourceLoader::start(const ResourceRequest& request,
|
| return;
|
| }
|
|
|
| + // This is only for overriding cache policy if cache-aware loading is
|
| + // activated.
|
| + ResourceRequest request(originalRequest);
|
| +
|
| + if (m_isCacheAwareLoadingActivated) {
|
| + // TODO(shaochuan): Use new flag
|
| + request.setCachePolicy(WebCachePolicy::ReturnCacheDataDontLoad);
|
| + }
|
| +
|
| m_loader = wrapUnique(Platform::current()->createURLLoader());
|
| DCHECK(m_loader);
|
| m_loader->setDefersLoading(defersLoading);
|
| @@ -137,6 +148,13 @@ bool ResourceLoader::willFollowRedirect(
|
| DCHECK(!passedNewRequest.isNull());
|
| DCHECK(!passedRedirectResponse.isNull());
|
|
|
| + if (m_isCacheAwareLoadingActivated) {
|
| + // Fail as cache miss if cached response is a redirect.
|
| + didFail(
|
| + ResourceError::cacheMissError(m_resource->lastResourceRequest().url()));
|
| + return false;
|
| + }
|
| +
|
| ResourceRequest& newRequest(passedNewRequest.toMutableResourceRequest());
|
| const ResourceResponse& redirectResponse(
|
| passedRedirectResponse.toResourceResponse());
|
| @@ -269,4 +287,22 @@ void ResourceLoader::requestSynchronously(const ResourceRequest& request) {
|
| didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength);
|
| }
|
|
|
| +bool ResourceLoader::willActivateCacheAwareLoading(
|
| + const ResourceRequest& request) {
|
| + // Don't activate on Resource revalidation.
|
| + if (m_resource->isCacheValidator())
|
| + return false;
|
| + // Don't activate if cache policy is explicitly set.
|
| + if (request.getCachePolicy() != WebCachePolicy::UseProtocolCachePolicy)
|
| + return false;
|
| +
|
| + m_isCacheAwareLoadingActivated = true;
|
| + return true;
|
| +}
|
| +
|
| +void ResourceLoader::deactivateCacheAwareLoading() {
|
| + DCHECK(m_isCacheAwareLoadingActivated);
|
| + m_isCacheAwareLoadingActivated = false;
|
| +}
|
| +
|
| } // namespace blink
|
|
|