summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/CacheManager.java
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-01-04 14:24:05 +0000
committerSteve Block <steveblock@google.com>2011-01-06 17:20:21 +0000
commit67ba204aa23e7d5a96ad241a1623e44976b51741 (patch)
treeb450e89cee9582a30d646696bbda2e447b45a3f6 /core/java/android/webkit/CacheManager.java
parente7fc1d26c5061cda7076d974f705c240e4e244fc (diff)
Tidy up CacheManager comments and documentation
Change-Id: I3a7d3836a51ef3092652ade87f29bc84af69ee7d
Diffstat (limited to 'core/java/android/webkit/CacheManager.java')
-rw-r--r--core/java/android/webkit/CacheManager.java102
1 files changed, 53 insertions, 49 deletions
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index 9bdc807c6da2..9eecafab58e5 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -183,8 +183,10 @@ public final class CacheManager {
}
/**
- * initialize the CacheManager. WebView should handle this for each process.
- *
+ * Initialize the CacheManager.
+ *
+ * Note that this is called automatically when a {@link android.webkit.WebView} is created.
+ *
* @param context The application context.
*/
static void init(Context context) {
@@ -195,10 +197,10 @@ public final class CacheManager {
mClearCacheOnInit = false;
}
}
-
+
/**
* Create the cache directory if it does not already exist.
- *
+ *
* @return true if the cache directory didn't exist and was created.
*/
static private boolean createCacheDirectory() {
@@ -211,7 +213,7 @@ public final class CacheManager {
mBaseDir.toString(),
FileUtils.S_IRWXU | FileUtils.S_IRWXG,
-1, -1);
- // If we did create the directory, we need to flush
+ // If we did create the directory, we need to flush
// the cache database. The directory could be recreated
// because the system flushed all the data/cache directories
// to free up disk space.
@@ -224,8 +226,9 @@ public final class CacheManager {
}
/**
- * get the base directory of the cache. With localPath of the CacheResult,
- * it identifies the cache file.
+ * Get the base directory of the cache. Together with the local path of the CacheResult,
+ * obtained from {@link android.webkit.CacheManager.CacheResult#getLocalPath}, this
+ * identifies the cache file.
*
* @return File The base directory of the cache.
*
@@ -237,9 +240,9 @@ public final class CacheManager {
}
/**
- * set the flag to control whether cache is enabled or disabled
- *
- * @param disabled true to disable the cache
+ * Sets whether the cache is disabled.
+ *
+ * @param disabled Whether the cache should be disabled
*/
static void setCacheDisabled(boolean disabled) {
if (disabled == mDisabled) {
@@ -252,9 +255,9 @@ public final class CacheManager {
}
/**
- * get the state of the current cache, enabled or disabled
+ * Whether the cache is disabled.
*
- * @return return if it is disabled
+ * @return return Whether the cache is disabled
*
* @deprecated Access to the HTTP cache will be removed in a future release.
*/
@@ -321,12 +324,14 @@ public final class CacheManager {
}
/**
- * Given a url, returns the CacheResult if exists. Otherwise returns null.
- * If headers are provided and a cache needs validation,
- * HEADER_KEY_IFNONEMATCH or HEADER_KEY_IFMODIFIEDSINCE will be set in the
- * cached headers.
- *
- * @return the CacheResult for a given url.
+ * Given a URL, returns the corresponding CacheResult if it exists, or null otherwise.
+ *
+ * The output stream of the CacheEntry object is initialized and opened and should be closed by
+ * the caller when access to the undelying file is no longer required.
+ * If a non-zero value is provided for the headers map, and the cache entry needs validation,
+ * HEADER_KEY_IFNONEMATCH or HEADER_KEY_IFMODIFIEDSINCE will be set in headers.
+ *
+ * @return The CacheResult for the given URL
*
* @deprecated Access to the HTTP cache will be removed in a future release.
*/
@@ -345,40 +350,39 @@ public final class CacheManager {
String databaseKey = getDatabaseKey(url, postIdentifier);
CacheResult result = mDataBase.getCache(databaseKey);
- if (result != null) {
- if (result.contentLength == 0) {
- if (!checkCacheRedirect(result.httpStatusCode)) {
- // this should not happen. If it does, remove it.
- mDataBase.removeCache(databaseKey);
- return null;
- }
- } else {
- File src = new File(mBaseDir, result.localPath);
- try {
- // open here so that even the file is deleted, the content
- // is still readable by the caller until close() is called
- result.inStream = new FileInputStream(src);
- } catch (FileNotFoundException e) {
- // the files in the cache directory can be removed by the
- // system. If it is gone, clean up the database
- mDataBase.removeCache(databaseKey);
- return null;
- }
+ if (result == null) {
+ return null;
+ }
+ if (result.contentLength == 0) {
+ if (!isCachableRedirect(result.httpStatusCode)) {
+ // This should not happen. If it does, remove it.
+ mDataBase.removeCache(databaseKey);
+ return null;
}
} else {
- return null;
+ File src = new File(mBaseDir, result.localPath);
+ try {
+ // Open the file here so that even if it is deleted, the content
+ // is still readable by the caller until close() is called.
+ result.inStream = new FileInputStream(src);
+ } catch (FileNotFoundException e) {
+ // The files in the cache directory can be removed by the
+ // system. If it is gone, clean up the database.
+ mDataBase.removeCache(databaseKey);
+ return null;
+ }
}
- // null headers request coming from CACHE_MODE_CACHE_ONLY
- // which implies that it needs cache even it is expired.
- // negative expires means time in the far future.
+ // A null value for headers is used by CACHE_MODE_CACHE_ONLY to imply
+ // that we should provide the cache result even if it is expired.
+ // Note that a negative expires value means a time in the far future.
if (headers != null && result.expires >= 0
&& result.expires <= System.currentTimeMillis()) {
if (result.lastModified == null && result.etag == null) {
return null;
}
- // return HEADER_KEY_IFNONEMATCH or HEADER_KEY_IFMODIFIEDSINCE
- // for requesting validation
+ // Return HEADER_KEY_IFNONEMATCH or HEADER_KEY_IFMODIFIEDSINCE
+ // for requesting validation.
if (result.etag != null) {
headers.put(HEADER_KEY_IFNONEMATCH, result.etag);
}
@@ -433,7 +437,7 @@ public final class CacheManager {
// like the other browsers, do not cache redirects containing a cookie
// header.
- if (checkCacheRedirect(statusCode) && !headers.getSetCookie().isEmpty()) {
+ if (isCachableRedirect(statusCode) && !headers.getSetCookie().isEmpty()) {
// remove the saved cache if there is any
mDataBase.removeCache(databaseKey);
return null;
@@ -494,7 +498,7 @@ public final class CacheManager {
return;
}
- boolean redirect = checkCacheRedirect(cacheRet.httpStatusCode);
+ boolean redirect = isCachableRedirect(cacheRet.httpStatusCode);
if (redirect) {
// location is in database, no need to keep the file
cacheRet.contentLength = 0;
@@ -525,9 +529,9 @@ public final class CacheManager {
}
/**
- * remove all cache files
- *
- * @return true if it succeeds
+ * Remove all cache files.
+ *
+ * @return Whether the removal succeeded.
*/
static boolean removeAllCacheFiles() {
// Note, this is called before init() when the database is
@@ -603,7 +607,7 @@ public final class CacheManager {
mDataBase.clearCache();
}
- private static boolean checkCacheRedirect(int statusCode) {
+ private static boolean isCachableRedirect(int statusCode) {
if (statusCode == 301 || statusCode == 302 || statusCode == 307) {
// as 303 can't be cached, we do not return true
return true;