Chromium Code Reviews| Index: Source/core/fetch/ResourceFetcher.cpp |
| diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp |
| index 3e51a7f819274f12beb1d2867d3c70d59086c5b3..4161341dbb711a0ab8f51e379a8050102cbb26d0 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 = createCacheIdentifier(); |
| + if (memoryCache()->resourceForURL(cacheIdentifier, url)) |
| return; |
| - if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest(), request.options())) { |
| + if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest(), request.options(), cacheIdentifier)) { |
|
Mike West
2014/10/24 12:43:00
cacheIdentifier should always be either first or l
nhiroki
2014/10/27 14:30:13
Done. I made "resourceForURL" receive "cacheIdenti
|
| 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 = createCacheIdentifier(); |
| const KURL& url = request.url(); |
| - if (Resource* oldResource = memoryCache()->resourceForURL(url)) |
| + if (Resource* oldResource = memoryCache()->resourceForURL(cacheIdentifier, url)) |
| 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()); |
| } |
| @@ -722,7 +726,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(createCacheIdentifier(), url); |
| const RevalidationPolicy policy = determineRevalidationPolicy(type, request, resource.get()); |
| switch (policy) { |
| @@ -794,17 +798,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); |
| @@ -907,6 +900,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()); |
| @@ -915,12 +909,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 = createCacheIdentifier(); |
| + ASSERT(!memoryCache()->resourceForURL(cacheIdentifier, request.resourceRequest().url())); |
| 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; |
| @@ -959,11 +955,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; |
| @@ -1519,6 +1510,13 @@ const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() |
| return options; |
| } |
| +String ResourceFetcher::createCacheIdentifier() const |
|
Mike West
2014/10/24 12:43:00
"create" seems wrong here. "get"?
nhiroki
2014/10/27 14:30:13
Done.
|
| +{ |
| + if (isControlledByServiceWorker()) |
| + return String::number(serviceWorkerID()); |
| + return MemoryCache::defaultCacheIdentifier(); |
| +} |
| + |
| ResourceFetcher::DeadResourceStatsRecorder::DeadResourceStatsRecorder() |
| : m_useCount(0) |
| , m_revalidateCount(0) |