Chromium Code Reviews| Index: Source/core/fetch/ResourceFetcher.cpp |
| diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp |
| index d2761cd2cddc17b34eb0117d803247edc33b0d42..5cfeb3029c5228aa57a0bdb5c170659d4f6afe95 100644 |
| --- a/Source/core/fetch/ResourceFetcher.cpp |
| +++ b/Source/core/fetch/ResourceFetcher.cpp |
| @@ -770,6 +770,17 @@ 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 (frame() && m_documentLoader && frame()->loader().client()->isControlledByServiceWorker(*m_documentLoader)) { |
| + ASSERT(policy == Load || policy == Reload); |
| + memoryCache()->remove(resource.get()); |
|
Nate Chapin
2014/10/09 17:56:22
Re: "(*) I'm not sure we can fetch a resource to b
nhiroki
2014/10/10 06:20:37
Thank you for your detailed answer! I'll take a lo
|
| + } |
| } |
| requestLoadStarted(resource.get(), request, policy == Use ? ResourceLoadingFromCache : ResourceLoadingFromNetwork); |
| @@ -928,6 +939,11 @@ 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 (frame() && m_documentLoader && frame()->loader().client()->isControlledByServiceWorker(*m_documentLoader)) |
| + return Reload; |
| + |
| // We already have a preload going for this URL. |
| if (fetchRequest.forPreload() && existingResource->isPreloaded()) |
| return Use; |