From a1ba11bd78f9540e58516dd742fe4cc8726e262f Mon Sep 17 00:00:00 2001 From: Andrei Popescu Date: Tue, 2 Feb 2010 15:59:26 +0000 Subject: [PATCH] Make sure application cache manifest files are not cached. Fix b:2326937 --- core/java/android/webkit/CacheManager.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java index 22dca3a85210..213eaa52537f 100644 --- a/core/java/android/webkit/CacheManager.java +++ b/core/java/android/webkit/CacheManager.java @@ -52,6 +52,7 @@ public final class CacheManager { private static final String NO_STORE = "no-store"; private static final String NO_CACHE = "no-cache"; private static final String MAX_AGE = "max-age"; + private static final String MANIFEST_MIME = "text/cache-manifest"; private static long CACHE_THRESHOLD = 6 * 1024 * 1024; private static long CACHE_TRIM_AMOUNT = 2 * 1024 * 1024; @@ -658,6 +659,15 @@ public final class CacheManager { // if the contentLength is already larger than CACHE_MAX_SIZE, skip it if (headers.getContentLength() > CACHE_MAX_SIZE) return null; + // The HTML 5 spec, section 6.9.4, step 7.3 of the application cache + // process states that HTTP caching rules are ignored for the + // purposes of the application cache download process. + // At this point we can't tell that if a file is part of this process, + // except for the manifest, which has its own mimeType. + // TODO: work out a way to distinguish all responses that are part of + // the application download process and skip them. + if (MANIFEST_MIME.equals(mimeType)) return null; + // TODO: if authenticated or secure, return null CacheResult ret = new CacheResult(); ret.httpStatusCode = statusCode; -- 2.11.0