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

Unified Diff: third_party/WebKit/Source/core/fetch/ResourceLoader.cpp

Issue 2454983002: Cache-aware Resource loading (Closed)
Patch Set: Created 4 years, 2 months 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698