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

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

Issue 640463003: MemoryCache: Enable MemoryCache to have multiple isolated resource maps (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: tweak variable names Created 6 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
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/html/parser/HTMLSrcsetParser.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/ResourceFetcher.cpp
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
index 5b56f90aefb2732d0711b3ef66ea9b06634e8958..95158a23e22b6aafc316d3055dad7bfeeccc8fe4 100644
--- a/Source/core/fetch/ResourceFetcher.cpp
+++ b/Source/core/fetch/ResourceFetcher.cpp
@@ -156,7 +156,7 @@ static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest
return ResourceLoadPriorityUnresolved;
}
-static Resource* resourceFromDataURIRequest(const ResourceRequest& request, const ResourceLoaderOptions& resourceOptions)
+static Resource* resourceFromDataURIRequest(const ResourceRequest& request, const ResourceLoaderOptions& resourceOptions, const String& cacheIdentifier)
{
const KURL& url = request.url();
ASSERT(url.protocolIsData());
@@ -173,6 +173,7 @@ static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons
resource->responseReceived(response);
if (data->size())
resource->setResourceBuffer(data);
+ resource->setCacheIdentifier(cacheIdentifier);
resource->finish();
return resource;
}
@@ -330,10 +331,11 @@ void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request)
const KURL& url = request.resourceRequest().url();
ASSERT(url.protocolIsData());
- if (memoryCache()->resourceForURL(url))
+ const String cacheIdentifier = getCacheIdentifier();
+ if (memoryCache()->resourceForURL(url, cacheIdentifier))
return;
- if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest(), request.options())) {
+ if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest(), request.options(), cacheIdentifier)) {
memoryCache()->add(resource);
scheduleDocumentResourcesGC();
}
@@ -424,8 +426,9 @@ ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request)
void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
{
+ const String cacheIdentifier = getCacheIdentifier();
const KURL& url = request.url();
- if (Resource* oldResource = memoryCache()->resourceForURL(url))
+ if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifier))
memoryCache()->remove(oldResource);
ResourceResponse response(url, substituteData.mimeType(), substituteData.content()->size(), substituteData.textEncoding(), emptyString());
@@ -436,6 +439,7 @@ void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest&
resource->responseReceived(response);
if (substituteData.content()->size())
resource->setResourceBuffer(substituteData.content());
+ resource->setCacheIdentifier(cacheIdentifier);
resource->finish();
memoryCache()->add(resource.get());
}
@@ -730,7 +734,7 @@ ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc
}
// See if we can use an existing resource from the cache.
- ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url);
+ ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url, getCacheIdentifier());
const RevalidationPolicy policy = determineRevalidationPolicy(type, request, resource.get());
switch (policy) {
@@ -802,17 +806,6 @@ ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc
ASSERT(policy != Use || m_documentLoader->substituteData().isValid());
ASSERT(policy != Revalidate);
memoryCache()->remove(resource.get());
- } else {
- // Remove a resource to be handled by Service Worker from the cache to
- // prevent reuse because Service Worker can serve an arbitrary resource
- // for an URL and pollute a memory cache entry.
- // FIXME: isControlledByServiceWorker() always returns false on main
- // resource request, but main resource is always removed from the cache
- // as the above comment (http://crbug.com/388375).
- if (isControlledByServiceWorker()) {
- ASSERT(policy == Load || policy == Reload);
- memoryCache()->remove(resource.get());
- }
}
requestLoadStarted(resource.get(), request, policy == Use ? ResourceLoadingFromCache : ResourceLoadingFromNetwork);
@@ -915,6 +908,7 @@ ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource.get(), resource);
newResource->setResourceToRevalidate(resource);
+ newResource->setCacheIdentifier(resource->cacheIdentifier());
memoryCache()->remove(resource);
memoryCache()->add(newResource.get());
@@ -923,12 +917,14 @@ ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type type, FetchRequest& request, const String& charset)
{
- ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url()));
+ const String cacheIdentifier = getCacheIdentifier();
+ ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url(), cacheIdentifier));
WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceRequest().url().elidedString().latin1().data());
addAdditionalRequestHeaders(request.mutableResourceRequest(), type);
ResourcePtr<Resource> resource = createResource(type, request.resourceRequest(), charset);
+ resource->setCacheIdentifier(cacheIdentifier);
memoryCache()->add(resource.get());
return resource;
@@ -967,11 +963,6 @@ ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy
if (!existingResource)
return Load;
- // FIXME: Currently caching for a resource to be handled by Service Worker
- // is disabled (http://crbug.com/388375).
- if (isControlledByServiceWorker())
- return Reload;
-
// We already have a preload going for this URL.
if (fetchRequest.forPreload() && existingResource->isPreloaded())
return Use;
@@ -1527,6 +1518,13 @@ const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions()
return options;
}
+String ResourceFetcher::getCacheIdentifier() const
+{
+ if (isControlledByServiceWorker())
+ return String::number(serviceWorkerID());
+ return MemoryCache::defaultCacheIdentifier();
+}
+
ResourceFetcher::DeadResourceStatsRecorder::DeadResourceStatsRecorder()
: m_useCount(0)
, m_revalidateCount(0)
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/html/parser/HTMLSrcsetParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698