diff options
-rw-r--r-- | src/com/android/providers/downloads/DownloadProvider.java | 8 | ||||
-rw-r--r-- | tests/public_api_access/src/com/android/providers/downloads/public_api_access_tests/PublicApiAccessTest.java | 20 |
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); + } } |