summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-01-29 14:48:46 -0800
committerJeff Sharkey <jsharkey@android.com>2013-01-29 15:36:51 -0800
commit58eee87b70862a7ced85eabc3c225fad24664065 (patch)
tree306bd82ba9eab04c2e2a4936a406651c08675a7b /src
parent38648831a92295e9a11831e19e5a9dab4cbd939e (diff)
downloadandroid_packages_providers_DownloadProvider-58eee87b70862a7ced85eabc3c225fad24664065.tar.gz
android_packages_providers_DownloadProvider-58eee87b70862a7ced85eabc3c225fad24664065.tar.bz2
android_packages_providers_DownloadProvider-58eee87b70862a7ced85eabc3c225fad24664065.zip
Tests for max retries/redirects, ETag switches.
Verify that servers responding with many retries or redirects result in failed download, instead of spinning out of control. Test to verify that changed ETag results in download failing. Also fix handling of HTTP 301 to update Uri in database. Change-Id: Iff2948d79961a245b7900117d107edaa356618c9
Diffstat (limited to 'src')
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java21
-rw-r--r--src/com/android/providers/downloads/Helpers.java2
2 files changed, 11 insertions, 12 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index bd347e42..0d427fdd 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -65,7 +65,6 @@ import java.net.URL;
import java.net.URLConnection;
import libcore.io.IoUtils;
-import libcore.net.http.HttpEngine;
/**
* Task which executes a given {@link DownloadInfo}: making network requests,
@@ -275,9 +274,7 @@ public class DownloadThread implements Runnable {
return;
}
- // TODO: compare mInfo.mNumFailed against Constants.MAX_RETRIES
-
- while (state.mRedirectionCount++ < HttpEngine.MAX_REDIRECTS) {
+ while (state.mRedirectionCount++ < Constants.MAX_REDIRECTS) {
// Open connection and follow any redirects until we have a useful
// response with body.
HttpURLConnection conn = null;
@@ -315,18 +312,16 @@ public class DownloadThread implements Runnable {
case HTTP_TEMP_REDIRECT:
final String location = conn.getHeaderField("Location");
state.mUrl = new URL(state.mUrl, location);
+ if (responseCode == HTTP_MOVED_PERM) {
+ // Push updated URL back to database
+ state.mRequestUri = state.mUrl.toString();
+ }
continue;
case HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:
throw new StopRequestException(
STATUS_CANNOT_RESUME, "Requested range not satisfiable");
- case HTTP_PRECON_FAILED:
- // TODO: probably means our etag precondition was
- // changed; flush and retry again
- StopRequestException.throwUnhandledHttpError(
- responseCode, conn.getResponseMessage());
-
case HTTP_UNAVAILABLE:
parseRetryAfterHeaders(state, conn);
throw new StopRequestException(
@@ -645,7 +640,7 @@ public class DownloadThread implements Runnable {
state.mMimeType,
mInfo.mDestination,
state.mContentLength,
- mInfo.mIsPublicApi, mStorageManager);
+ mStorageManager);
updateDatabaseFromHeaders(state);
// check connectivity again now that we know the total size
@@ -826,6 +821,10 @@ public class DownloadThread implements Runnable {
values.put(Downloads.Impl.COLUMN_FAILED_CONNECTIONS, numFailed);
values.put(Constants.RETRY_AFTER_X_REDIRECT_COUNT, state.mRetryAfter);
+ if (!TextUtils.equals(mInfo.mUri, state.mRequestUri)) {
+ values.put(Downloads.Impl.COLUMN_URI, state.mRequestUri);
+ }
+
// save the error message. could be useful to developers.
if (!TextUtils.isEmpty(errorMsg)) {
values.put(Downloads.Impl.COLUMN_ERROR_MSG, errorMsg);
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java
index 059e9703..5c34ebe1 100644
--- a/src/com/android/providers/downloads/Helpers.java
+++ b/src/com/android/providers/downloads/Helpers.java
@@ -77,7 +77,7 @@ public class Helpers {
String mimeType,
int destination,
long contentLength,
- boolean isPublicApi, StorageManager storageManager) throws StopRequestException {
+ StorageManager storageManager) throws StopRequestException {
if (contentLength < 0) {
contentLength = 0;
}