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

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

Issue 2390583002: [WIP] WebFonts cache-aware timeout adaption (Closed)
Patch Set: handle font-display: swap 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/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);

Powered by Google App Engine
This is Rietveld 408576698