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

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

Issue 2353013002: [test] Resources served from MemoryCache - early exit (Closed)
Patch Set: use the right issue :P 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 5105488d1075419512ef874a4c21adde757db359..1de2c730abec0cfe274340cf2efcf8bf6c92fa82 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -488,6 +488,8 @@ Resource* ResourceFetcher::requestResource(
DCHECK(request.options().synchronousPolicy == RequestAsynchronously ||
factory.type() == Resource::Raw ||
factory.type() == Resource::XSLStyleSheet);
+ TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url",
+ urlForTraceEvent(request.url()));
context().populateRequestData(request.mutableResourceRequest());
if (request.resourceRequest().httpHeaderField("Upgrade-Insecure-Requests") !=
@@ -497,13 +499,30 @@ Resource* ResourceFetcher::requestResource(
context().addClientHintsIfNecessary(request);
context().addCSPHeaderIfNecessary(factory.type(), request);
- TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url",
- urlForTraceEvent(request.url()));
-
if (!request.url().isValid())
return nullptr;
unsigned long identifier = createUniqueIdentifier();
+
+ // Potentially early return if this request matches a preload. We need to be
+ // careful to ensure that the preload request matches the various security
+ // properties of the load.
+ Resource* originalResource(nullptr);
+ originalResource =
+ memoryCache()->resourceForURL(request.url(), getCacheIdentifier());
+ if (originalResource) {
+ const RevalidationPolicy policy = determineRevalidationPolicy(
+ factory.type(), request, originalResource, false);
+ if (policy == Use) {
+ if (originalResource->isLinkPreload() && !request.isLinkPreload())
+ originalResource->setLinkPreload(false);
+ moveCachedNonBlockingResourceToBlocking(originalResource, request);
+ requestLoadStarted(identifier, originalResource, request,
+ ResourceLoadingFromCache, false);
+ return originalResource;
+ }
+ }
+
request.mutableResourceRequest().setPriority(computeLoadPriority(
factory.type(), request, ResourcePriority::NotVisible));
initializeResourceRequest(request.mutableResourceRequest(), factory.type(),
@@ -555,9 +574,16 @@ Resource* ResourceFetcher::requestResource(
if (!resource && !isDataUrl && m_archive)
return nullptr;
}
+
+ // Only retrieve the Resource from MemoryCache if the url has been changed
+ // by the embedder.
if (!resource) {
- resource =
- memoryCache()->resourceForURL(request.url(), getCacheIdentifier());
+ if (!originalResource || request.url() != originalResource->url()) {
+ resource =
+ memoryCache()->resourceForURL(request.url(), getCacheIdentifier());
+ } else {
+ resource = originalResource;
+ }
}
// See if we can use an existing resource from the cache. If so, we need to
@@ -808,10 +834,6 @@ ResourceFetcher::determineRevalidationPolicy(Resource::Type type,
if (existingResource->response().wasFallbackRequiredByServiceWorker())
return Reload;
- // We already have a preload going for this URL.
- if (fetchRequest.forPreload() && existingResource->isPreloaded())
- return Use;
-
// If the same URL has been loaded as a different type, we need to reload.
if (existingResource->getType() != type) {
// FIXME: If existingResource is a Preload and the new type is LinkPrefetch
@@ -823,6 +845,10 @@ ResourceFetcher::determineRevalidationPolicy(Resource::Type type,
return Reload;
}
+ // We already have a preload going for this URL.
+ if (fetchRequest.forPreload() && existingResource->isPreloaded())
+ return Use;
+
// Do not load from cache if images are not enabled. There are two general
// cases:
//

Powered by Google App Engine
This is Rietveld 408576698