summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-11-10 22:42:55 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-11-10 22:42:55 +0000
commitbcb8d32b083b2f76327126acfcb0e35ae891feed (patch)
tree426b4a24d464a353be3caf40e0a2a504687b375b
parent9d424fb0e9096a7d670bfd915b09ef2a46323cc4 (diff)
parentc83a3a844ec0c3d7a000fbf26a181bff1ddeb8a3 (diff)
downloadandroid_packages_providers_DownloadProvider-bcb8d32b083b2f76327126acfcb0e35ae891feed.tar.gz
android_packages_providers_DownloadProvider-bcb8d32b083b2f76327126acfcb0e35ae891feed.tar.bz2
android_packages_providers_DownloadProvider-bcb8d32b083b2f76327126acfcb0e35ae891feed.zip
am c83a3a84: am 0a910e21: Connection: close is enough to know length. automerge: 0032d17
* commit 'c83a3a844ec0c3d7a000fbf26a181bff1ddeb8a3': Connection: close is enough to know length.
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index c0f5a5e9..2493adaf 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -439,12 +439,16 @@ public class DownloadThread implements Runnable {
*/
private void transferData(HttpURLConnection conn) throws StopRequestException {
- // To detect when we're really finished, we either need a length or
- // chunked encoding.
+ // To detect when we're really finished, we either need a length, closed
+ // connection, or chunked encoding.
final boolean hasLength = mInfoDelta.mTotalBytes != -1;
- final String transferEncoding = conn.getHeaderField("Transfer-Encoding");
- final boolean isChunked = "chunked".equalsIgnoreCase(transferEncoding);
- if (!hasLength && !isChunked) {
+ final boolean isConnectionClose = "close".equalsIgnoreCase(
+ conn.getHeaderField("Connection"));
+ final boolean isEncodingChunked = "chunked".equalsIgnoreCase(
+ conn.getHeaderField("Transfer-Encoding"));
+
+ final boolean finishKnown = hasLength || isConnectionClose || isEncodingChunked;
+ if (!finishKnown) {
throw new StopRequestException(
STATUS_CANNOT_RESUME, "can't know size of download, giving up");
}