summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/CacheManager.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-18 17:39:46 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-18 17:39:46 -0700
commit105925376f8d0f6b318c9938c7b83ef7fef094da (patch)
tree3b19ee2bd8704cb9c6a0da7e42dec6759183de6d /core/java/android/webkit/CacheManager.java
parentba87e3e6c985e7175152993b5efcc7dd2f0e1c93 (diff)
auto import from //branches/cupcake_rel/...@140373
Diffstat (limited to 'core/java/android/webkit/CacheManager.java')
-rw-r--r--core/java/android/webkit/CacheManager.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index dcf68cd9353f..4528b73aa788 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -282,9 +282,7 @@ public final class CacheManager {
CacheResult result = mDataBase.getCache(url);
if (result != null) {
if (result.contentLength == 0) {
- if (result.httpStatusCode != 301
- && result.httpStatusCode != 302
- && result.httpStatusCode != 307) {
+ if (!checkCacheRedirect(result.httpStatusCode)) {
// this should not happen. If it does, remove it.
mDataBase.removeCache(url);
return null;
@@ -350,6 +348,17 @@ public final class CacheManager {
return null;
}
+ // according to the rfc 2616, the 303 response MUST NOT be cached.
+ if (statusCode == 303) {
+ return null;
+ }
+
+ // like the other browsers, do not cache redirects containing a cookie
+ // header.
+ if (checkCacheRedirect(statusCode) && !headers.getSetCookie().isEmpty()) {
+ return null;
+ }
+
CacheResult ret = parseHeaders(statusCode, headers, mimeType);
if (ret != null) {
setupFiles(url, ret);
@@ -395,9 +404,7 @@ public final class CacheManager {
}
cacheRet.contentLength = cacheRet.outFile.length();
- if (cacheRet.httpStatusCode == 301
- || cacheRet.httpStatusCode == 302
- || cacheRet.httpStatusCode == 307) {
+ if (checkCacheRedirect(cacheRet.httpStatusCode)) {
// location is in database, no need to keep the file
cacheRet.contentLength = 0;
cacheRet.localPath = new String();
@@ -471,6 +478,15 @@ public final class CacheManager {
}
}
+ private static boolean checkCacheRedirect(int statusCode) {
+ if (statusCode == 301 || statusCode == 302 || statusCode == 307) {
+ // as 303 can't be cached, we do not return true
+ return true;
+ } else {
+ return false;
+ }
+ }
+
@SuppressWarnings("deprecation")
private static void setupFiles(String url, CacheResult cacheRet) {
if (true) {