diff options
Diffstat (limited to 'src/com/android/providers/downloads/DownloadThread.java')
-rw-r--r-- | src/com/android/providers/downloads/DownloadThread.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java index 65142db6..f6b0be6d 100644 --- a/src/com/android/providers/downloads/DownloadThread.java +++ b/src/com/android/providers/downloads/DownloadThread.java @@ -45,6 +45,7 @@ import android.drm.DrmManagerClient; import android.drm.DrmOutputStream; import android.net.ConnectivityManager; import android.net.INetworkPolicyListener; +import android.net.Network; import android.net.NetworkInfo; import android.net.NetworkPolicyManager; import android.net.TrafficStats; @@ -351,6 +352,15 @@ public class DownloadThread implements Runnable { throw new StopRequestException(STATUS_BAD_REQUEST, e); } + // Use the caller's default network to make this connection, since they might be subject to + // restrictions that we shouldn't let them circumvent. + final Network network = mSystemFacade.getActiveNetwork(mInfo.mUid); + if (network == null) { + throw new StopRequestException(Downloads.Impl.STATUS_WAITING_FOR_NETWORK, + "no network associated with requesting UID"); + } + logDebug("Using network: " + network); + boolean cleartextTrafficPermitted = mSystemFacade.isCleartextTrafficPermitted(mInfo.mUid); int redirectionCount = 0; while (redirectionCount++ < Constants.MAX_REDIRECTS) { @@ -366,8 +376,10 @@ public class DownloadThread implements Runnable { // response with body. HttpURLConnection conn = null; try { + // Check that the caller is allowed to make network connections. If so, make one on + // their behalf to open the url. checkConnectivity(); - conn = (HttpURLConnection) url.openConnection(); + conn = (HttpURLConnection) network.openConnection(url); conn.setInstanceFollowRedirects(false); conn.setConnectTimeout(DEFAULT_TIMEOUT); conn.setReadTimeout(DEFAULT_TIMEOUT); |