| Index: Source/core/fetch/ResourceFetcher.cpp
|
| diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
|
| index 2677d952bb19eb4fb119c2109c1bdbd846202d78..fbf71f27d96e634db53df4ac2be3bd09209e8279 100644
|
| --- a/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -784,6 +784,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());
|
| + }
|
| }
|
|
|
| requestLoadStarted(resource.get(), request, policy == Use ? ResourceLoadingFromCache : ResourceLoadingFromNetwork);
|
| @@ -942,6 +953,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;
|
|
|