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:
@@ -56,6 +56,9 @@ public final class CacheManager {
|
||||
private static long CACHE_THRESHOLD = 6 * 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;
|
||||
|
||||
// Reference count the enable/disable transaction
|
||||
@@ -448,7 +451,6 @@ public final class CacheManager {
|
||||
return;
|
||||
}
|
||||
|
||||
cacheRet.contentLength = cacheRet.outFile.length();
|
||||
boolean redirect = checkCacheRedirect(cacheRet.httpStatusCode);
|
||||
if (redirect) {
|
||||
// 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
|
||||
*
|
||||
@@ -644,6 +655,9 @@ public final class CacheManager {
|
||||
|
||||
private static CacheResult parseHeaders(int statusCode, Headers headers,
|
||||
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
|
||||
CacheResult ret = new CacheResult();
|
||||
ret.httpStatusCode = statusCode;
|
||||
|
||||
@@ -936,8 +936,11 @@ class LoadListener extends Handler implements EventHandler {
|
||||
void downloadFile() {
|
||||
// Setting the Cache Result to null ensures that this
|
||||
// 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
|
||||
mBrowserFrame.getCallbackProxy().onDownloadStart(url(),
|
||||
mBrowserFrame.getUserAgentString(),
|
||||
@@ -1096,10 +1099,18 @@ class LoadListener extends Handler implements EventHandler {
|
||||
|
||||
if (c.mLength != 0) {
|
||||
if (mCacheResult != null) {
|
||||
try {
|
||||
mCacheResult.outStream.write(c.mArray, 0, c.mLength);
|
||||
} catch (IOException e) {
|
||||
mCacheResult.contentLength += c.mLength;
|
||||
if (mCacheResult.contentLength > CacheManager.CACHE_MAX_SIZE) {
|
||||
CacheManager.cleanupCacheFile(mCacheResult);
|
||||
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);
|
||||
@@ -1117,6 +1128,8 @@ class LoadListener extends Handler implements EventHandler {
|
||||
if (mCacheResult != null) {
|
||||
if (getErrorID() == OK) {
|
||||
CacheManager.saveCacheFile(mUrl, mPostIdentifier, mCacheResult);
|
||||
} else {
|
||||
CacheManager.cleanupCacheFile(mCacheResult);
|
||||
}
|
||||
|
||||
// we need to reset mCacheResult to be null
|
||||
@@ -1181,7 +1194,10 @@ class LoadListener extends Handler implements EventHandler {
|
||||
mRequestHandle = null;
|
||||
}
|
||||
|
||||
mCacheResult = null;
|
||||
if (mCacheResult != null) {
|
||||
CacheManager.cleanupCacheFile(mCacheResult);
|
||||
mCacheResult = null;
|
||||
}
|
||||
mCancelled = true;
|
||||
|
||||
clearNativeLoader();
|
||||
@@ -1246,6 +1262,8 @@ class LoadListener extends Handler implements EventHandler {
|
||||
if (getErrorID() == OK) {
|
||||
CacheManager.saveCacheFile(mUrl, mPostIdentifier,
|
||||
mCacheResult);
|
||||
} else {
|
||||
CacheManager.cleanupCacheFile(mCacheResult);
|
||||
}
|
||||
mCacheResult = null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user