Merge "Cleanup the cache file when we decide not saving it. This logic was lost when we switched back using FLASH instead of RAM for the cache." into eclair-mr2

This commit is contained in:
Grace Kloba
2010-01-04 09:55:54 -08:00
committed by Android (Google) Code Review
2 changed files with 39 additions and 7 deletions

View File

@@ -56,6 +56,9 @@ public final class CacheManager {
private static long CACHE_THRESHOLD = 6 * 1024 * 1024; private static long CACHE_THRESHOLD = 6 * 1024 * 1024;
private static long CACHE_TRIM_AMOUNT = 2 * 1024 * 1024; private static long CACHE_TRIM_AMOUNT = 2 * 1024 * 1024;
// Limit the maximum cache file size to half of the normal capacity
static long CACHE_MAX_SIZE = (CACHE_THRESHOLD - CACHE_TRIM_AMOUNT) / 2;
private static boolean mDisabled; private static boolean mDisabled;
// Reference count the enable/disable transaction // Reference count the enable/disable transaction
@@ -448,7 +451,6 @@ public final class CacheManager {
return; return;
} }
cacheRet.contentLength = cacheRet.outFile.length();
boolean redirect = checkCacheRedirect(cacheRet.httpStatusCode); boolean redirect = checkCacheRedirect(cacheRet.httpStatusCode);
if (redirect) { if (redirect) {
// location is in database, no need to keep the file // location is in database, no need to keep the file
@@ -470,6 +472,15 @@ public final class CacheManager {
} }
} }
static boolean cleanupCacheFile(CacheResult cacheRet) {
try {
cacheRet.outStream.close();
} catch (IOException e) {
return false;
}
return cacheRet.outFile.delete();
}
/** /**
* remove all cache files * remove all cache files
* *
@@ -644,6 +655,9 @@ public final class CacheManager {
private static CacheResult parseHeaders(int statusCode, Headers headers, private static CacheResult parseHeaders(int statusCode, Headers headers,
String mimeType) { String mimeType) {
// if the contentLength is already larger than CACHE_MAX_SIZE, skip it
if (headers.getContentLength() > CACHE_MAX_SIZE) return null;
// TODO: if authenticated or secure, return null // TODO: if authenticated or secure, return null
CacheResult ret = new CacheResult(); CacheResult ret = new CacheResult();
ret.httpStatusCode = statusCode; ret.httpStatusCode = statusCode;

View File

@@ -936,8 +936,11 @@ class LoadListener extends Handler implements EventHandler {
void downloadFile() { void downloadFile() {
// Setting the Cache Result to null ensures that this // Setting the Cache Result to null ensures that this
// content is not added to the cache // content is not added to the cache
mCacheResult = null; if (mCacheResult != null) {
CacheManager.cleanupCacheFile(mCacheResult);
mCacheResult = null;
}
// Inform the client that they should download a file // Inform the client that they should download a file
mBrowserFrame.getCallbackProxy().onDownloadStart(url(), mBrowserFrame.getCallbackProxy().onDownloadStart(url(),
mBrowserFrame.getUserAgentString(), mBrowserFrame.getUserAgentString(),
@@ -1096,10 +1099,18 @@ class LoadListener extends Handler implements EventHandler {
if (c.mLength != 0) { if (c.mLength != 0) {
if (mCacheResult != null) { if (mCacheResult != null) {
try { mCacheResult.contentLength += c.mLength;
mCacheResult.outStream.write(c.mArray, 0, c.mLength); if (mCacheResult.contentLength > CacheManager.CACHE_MAX_SIZE) {
} catch (IOException e) { CacheManager.cleanupCacheFile(mCacheResult);
mCacheResult = null; mCacheResult = null;
} else {
try {
mCacheResult.outStream
.write(c.mArray, 0, c.mLength);
} catch (IOException e) {
CacheManager.cleanupCacheFile(mCacheResult);
mCacheResult = null;
}
} }
} }
nativeAddData(c.mArray, c.mLength); nativeAddData(c.mArray, c.mLength);
@@ -1117,6 +1128,8 @@ class LoadListener extends Handler implements EventHandler {
if (mCacheResult != null) { if (mCacheResult != null) {
if (getErrorID() == OK) { if (getErrorID() == OK) {
CacheManager.saveCacheFile(mUrl, mPostIdentifier, mCacheResult); CacheManager.saveCacheFile(mUrl, mPostIdentifier, mCacheResult);
} else {
CacheManager.cleanupCacheFile(mCacheResult);
} }
// we need to reset mCacheResult to be null // we need to reset mCacheResult to be null
@@ -1181,7 +1194,10 @@ class LoadListener extends Handler implements EventHandler {
mRequestHandle = null; mRequestHandle = null;
} }
mCacheResult = null; if (mCacheResult != null) {
CacheManager.cleanupCacheFile(mCacheResult);
mCacheResult = null;
}
mCancelled = true; mCancelled = true;
clearNativeLoader(); clearNativeLoader();
@@ -1246,6 +1262,8 @@ class LoadListener extends Handler implements EventHandler {
if (getErrorID() == OK) { if (getErrorID() == OK) {
CacheManager.saveCacheFile(mUrl, mPostIdentifier, CacheManager.saveCacheFile(mUrl, mPostIdentifier,
mCacheResult); mCacheResult);
} else {
CacheManager.cleanupCacheFile(mCacheResult);
} }
mCacheResult = null; mCacheResult = null;
} }