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_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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user