Update local file URLs to include syncToken
Bug: 263493933
Test: atest
Change-Id: I300dfbdae675e1403929bb5f07fe551432fadc49
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
index a494361..e4eec7c 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
@@ -133,14 +133,14 @@
throw new IllegalArgumentException("Failed to retrieve base download URL");
}
Uri uri = Uri.parse(baseURL);
- // Handle odp debug URLs
- if (OnDevicePersonalizationLocalFileDownloader.isLocalOdpUri(uri)
- && PackageUtils.isPackageDebuggable(context, packageName)) {
- return uri.toString();
- }
// Enforce URI scheme
- if (!baseURL.startsWith("https")) {
+ if (OnDevicePersonalizationLocalFileDownloader.isLocalOdpUri(uri)) {
+ if (!PackageUtils.isPackageDebuggable(context, packageName)) {
+ throw new IllegalArgumentException("Local urls are only valid "
+ + "for debuggable packages: " + baseURL);
+ }
+ } else if (!baseURL.startsWith("https")) {
throw new IllegalArgumentException("File url is not secure: " + baseURL);
}
@@ -150,7 +150,8 @@
/**
* Adds query parameters to the download URL.
*/
- public static String addDownloadUrlQueryParameters(Uri uri, String packageName, Context context)
+ private static String addDownloadUrlQueryParameters(Uri uri, String packageName,
+ Context context)
throws PackageManager.NameNotFoundException {
long syncToken = OnDevicePersonalizationVendorDataDao.getInstance(context, packageName,
PackageUtils.getCertDigest(context, packageName)).getSyncToken();
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
index bc5c4f0..34c9a90 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
@@ -92,6 +92,11 @@
Uri fileUri = downloadRequest.fileUri();
String urlToDownload = downloadRequest.urlToDownload();
Uri uriToDownload = Uri.parse(urlToDownload);
+ // Strip away the query params for local download.
+ uriToDownload = new Uri.Builder()
+ .scheme(uriToDownload.getScheme())
+ .authority(uriToDownload.getAuthority())
+ .path(uriToDownload.getPath()).build();
Log.d(TAG, "Starting local download for url: " + urlToDownload);
try {
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
index 20fe303..4a88b38 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
@@ -23,10 +23,20 @@
*/
public class OnDevicePersonalizationMddFlags implements Flags {
/**
+ * Allow non-http urls. This will be used for debuggable packages.
* {@link OnDevicePersonalizationFileDownloader} will enforce uri scheme instead.
*/
@Override
public boolean downloaderEnforceHttps() {
return false;
}
+
+ /**
+ * Allow sideloading for files. This will be used for debuggable packages.
+ * {@link OnDevicePersonalizationFileDownloader} will enforce uri scheme instead.
+ */
+ @Override
+ public boolean enableSideloading() {
+ return true;
+ }
}
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
index 76169ad..c8d9026 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
@@ -21,7 +21,6 @@
import static org.junit.Assert.assertTrue;
import android.content.Context;
-import android.net.Uri;
import androidx.test.core.app.ApplicationProvider;
@@ -121,7 +120,7 @@
}
@Test
- public void testAddDownloadUrlQueryParameters() throws Exception {
+ public void testCreateDownloadUrlQueryParameters() throws Exception {
long timestamp = System.currentTimeMillis();
assertTrue(OnDevicePersonalizationVendorDataDao.getInstanceForTest(mContext, mPackageName,
PackageUtils.getCertDigest(mContext, mPackageName))
@@ -129,8 +128,7 @@
timestamp));
String downloadUrl =
- OnDevicePersonalizationFileGroupPopulator.addDownloadUrlQueryParameters(
- Uri.parse(BASE_URL), mPackageName, mContext);
+ OnDevicePersonalizationFileGroupPopulator.createDownloadUrl(mPackageName, mContext);
assertTrue(downloadUrl.startsWith(BASE_URL));
assertTrue(downloadUrl.contains(String.valueOf(timestamp)));
}
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
index d5ed602..408df72 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
@@ -17,6 +17,7 @@
package com.android.ondevicepersonalization.services.download.mdd;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -26,8 +27,14 @@
public class OnDevicePersonalizationMddFlagsTests {
@Test
- public void testBackgroundExecutorSettings() {
+ public void testDownloaderEnforceHttps() {
OnDevicePersonalizationMddFlags mddFlags = new OnDevicePersonalizationMddFlags();
assertFalse(mddFlags.downloaderEnforceHttps());
}
+
+ @Test
+ public void testEnableSideloading() {
+ OnDevicePersonalizationMddFlags mddFlags = new OnDevicePersonalizationMddFlags();
+ assertTrue(mddFlags.enableSideloading());
+ }
}