summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers
diff options
context:
space:
mode:
authorRobin Lee <rgl@google.com>2016-03-24 12:02:50 +0000
committerRobin Lee <rgl@google.com>2016-04-07 15:14:11 +0000
commit26c68db9ccf1983f5d6e8a734f8ffccea3849f10 (patch)
tree3654c7a8ff8c3a9c035756adda6a1b79fcbdc4b1 /src/com/android/providers
parenta013d5b1a3a66297ea9471767fcbfef7f6ba4d69 (diff)
downloadandroid_packages_providers_DownloadProvider-26c68db9ccf1983f5d6e8a734f8ffccea3849f10.tar.gz
android_packages_providers_DownloadProvider-26c68db9ccf1983f5d6e8a734f8ffccea3849f10.tar.bz2
android_packages_providers_DownloadProvider-26c68db9ccf1983f5d6e8a734f8ffccea3849f10.zip
Implement multi-network downloads
Downloads should use the default network for the caller. This prevents applications from, for example, bypassing VPN by routing all requests through the DownloadProvider. Bug: 27074270 Change-Id: I7830226dd2910757d3a5c78f373330f84637ccfa
Diffstat (limited to 'src/com/android/providers')
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java10
-rw-r--r--src/com/android/providers/downloads/RealSystemFacade.java8
-rw-r--r--src/com/android/providers/downloads/SystemFacade.java3
3 files changed, 20 insertions, 1 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 65142db6..8d51909e 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,13 @@ public class DownloadThread implements Runnable {
throw new StopRequestException(STATUS_BAD_REQUEST, e);
}
+ 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) {
@@ -367,7 +375,7 @@ public class DownloadThread implements Runnable {
HttpURLConnection conn = null;
try {
checkConnectivity();
- conn = (HttpURLConnection) url.openConnection();
+ conn = (HttpURLConnection) network.openConnection(url);
conn.setInstanceFollowRedirects(false);
conn.setConnectTimeout(DEFAULT_TIMEOUT);
conn.setReadTimeout(DEFAULT_TIMEOUT);
diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java
index b3f170fb..48df2a09 100644
--- a/src/com/android/providers/downloads/RealSystemFacade.java
+++ b/src/com/android/providers/downloads/RealSystemFacade.java
@@ -26,6 +26,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
+import android.net.Network;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -59,6 +60,13 @@ class RealSystemFacade implements SystemFacade {
}
@Override
+ public Network getActiveNetwork(int uid) {
+ ConnectivityManager connectivity =
+ (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ return connectivity.getActiveNetworkForUid(uid);
+ }
+
+ @Override
public boolean isActiveNetworkMetered() {
final ConnectivityManager conn = ConnectivityManager.from(mContext);
return conn.isActiveNetworkMetered();
diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java
index 83fc7a63..7f97b919 100644
--- a/src/com/android/providers/downloads/SystemFacade.java
+++ b/src/com/android/providers/downloads/SystemFacade.java
@@ -18,6 +18,7 @@ package com.android.providers.downloads;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.net.Network;
import android.net.NetworkInfo;
interface SystemFacade {
@@ -32,6 +33,8 @@ interface SystemFacade {
*/
public NetworkInfo getActiveNetworkInfo(int uid);
+ public Network getActiveNetwork(int uid);
+
public boolean isActiveNetworkMetered();
/**