summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java8
-rw-r--r--tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java20
2 files changed, 28 insertions, 0 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index 41b732f1..4fcae227 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -46,6 +46,7 @@ import com.google.common.annotations.VisibleForTesting;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Map;
@@ -518,6 +519,13 @@ public final class DownloadProvider extends ContentProvider {
values.remove(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE); // checked later in insert()
values.remove(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES);
values.remove(Downloads.Impl.COLUMN_ALLOW_ROAMING);
+ Iterator<Map.Entry<String, Object>> iterator = values.valueSet().iterator();
+ while (iterator.hasNext()) {
+ String key = iterator.next().getKey();
+ if (key.startsWith(Downloads.Impl.RequestHeaders.INSERT_KEY_PREFIX)) {
+ iterator.remove();
+ }
+ }
// any extra columns are extraneous and disallowed
if (values.size() > 0) {
diff --git a/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java b/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
index 4b2ae092..3929c59e 100644
--- a/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
+++ b/tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java
@@ -18,6 +18,8 @@ package com.android.providers.downloads.public_api_access_tests;
import android.content.ContentResolver;
import android.content.ContentValues;
+import android.net.DownloadManager;
+import android.net.Uri;
import android.provider.Downloads;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
@@ -43,11 +45,13 @@ public class PublicApiAccessTest extends AndroidTestCase {
};
private ContentResolver mContentResolver;
+ private DownloadManager mManager;
@Override
protected void setUp() throws Exception {
super.setUp();
mContentResolver = getContext().getContentResolver();
+ mManager = new DownloadManager(mContentResolver, getContext().getPackageName());
}
@Override
@@ -70,6 +74,7 @@ public class PublicApiAccessTest extends AndroidTestCase {
values.put(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE, "foo");
values.put(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES, 0);
values.put(Downloads.Impl.COLUMN_ALLOW_ROAMING, true);
+ values.put(Downloads.Impl.RequestHeaders.INSERT_KEY_PREFIX + "0", "X-Some-Header: value");
mContentResolver.insert(Downloads.Impl.CONTENT_URI, values);
}
@@ -133,4 +138,19 @@ public class PublicApiAccessTest extends AndroidTestCase {
// expected
}
}
+
+ public void testDownloadManagerRequest() {
+ // first try a minimal request
+ DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://localhost/path"));
+ mManager.enqueue(request);
+
+ // now set everything we can, save for external destintion (for which we lack permission)
+ request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
+ request.setAllowedOverRoaming(false);
+ request.setTitle("test");
+ request.setDescription("test");
+ request.setMediaType("text/html");
+ request.setRequestHeader("X-Some-Header", "value");
+ mManager.enqueue(request);
+ }
}