diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-11-10 22:42:55 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-11-10 22:42:55 +0000 |
commit | bcb8d32b083b2f76327126acfcb0e35ae891feed (patch) | |
tree | 426b4a24d464a353be3caf40e0a2a504687b375b | |
parent | 9d424fb0e9096a7d670bfd915b09ef2a46323cc4 (diff) | |
parent | c83a3a844ec0c3d7a000fbf26a181bff1ddeb8a3 (diff) | |
download | android_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.java | 14 |
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"); } |