Skip to content

Commit 2471390

Browse files
author
rich cannings
committed
Pass URLs to package verifiers
This change passes the originating URL and accompanied referrer to package verifiers, when available. Bug: 6544677 Change-Id: If9ff6663ad7f3426b7aea2aceb1413b689788138
1 parent 26ea2e5 commit 2471390

File tree

8 files changed

+116
-21
lines changed

8 files changed

+116
-21
lines changed

api/current.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5825,7 +5825,7 @@ package android.content {
58255825
field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT";
58265826
field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY";
58275827
field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
5828-
field public static final java.lang.String EXTRA_ORIGINATING_URL = "android.intent.extra.ORIGINATING_URL";
5828+
field public static final java.lang.String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI";
58295829
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
58305830
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
58315831
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";

cmds/pm/src/com/android/commands/pm/Pm.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,7 @@ private void runInstall() {
782782
String macAlgo = null;
783783
byte[] macKey = null;
784784
byte[] tag = null;
785+
String referrer = null;
785786

786787
while ((opt=nextOption()) != null) {
787788
if (opt.equals("-l")) {
@@ -845,6 +846,13 @@ private void runInstall() {
845846
showUsage();
846847
return;
847848
}
849+
} else if (opt.equals("--referrer")) {
850+
referrer = nextOptionData();
851+
if (referrer == null) {
852+
System.err.println("Error: must supply argument for --referrer");
853+
showUsage();
854+
return;
855+
}
848856
} else {
849857
System.err.println("Error: Unknown option: " + opt);
850858
showUsage();
@@ -892,6 +900,13 @@ private void runInstall() {
892900

893901
final Uri apkURI;
894902
final Uri verificationURI;
903+
final Uri referrerURI;
904+
905+
if (referrer != null) {
906+
referrerURI = Uri.parse(referrer);
907+
} else {
908+
referrerURI = null;
909+
}
895910

896911
// Populate apkURI, must be present
897912
final String apkFilePath = nextArg();
@@ -916,7 +931,7 @@ private void runInstall() {
916931
PackageInstallObserver obs = new PackageInstallObserver();
917932
try {
918933
mPm.installPackageWithVerification(apkURI, obs, installFlags, installerPackageName,
919-
verificationURI, null, encryptionParams);
934+
verificationURI, null, encryptionParams, apkURI, referrerURI);
920935

921936
synchronized (obs) {
922937
while (!obs.finished) {
@@ -1436,7 +1451,8 @@ private static void showUsage() {
14361451
System.err.println(" pm list libraries");
14371452
System.err.println(" pm path PACKAGE");
14381453
System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f]");
1439-
System.err.println(" [--algo <algorithm name> --key <key-in-hex> --iv <IV-in-hex>] PATH");
1454+
System.err.println(" [--algo <algorithm name> --key <key-in-hex> --iv <IV-in-hex>]");
1455+
System.err.println(" [--referrer <URI>] PATH");
14401456
System.err.println(" pm uninstall [-k] PACKAGE");
14411457
System.err.println(" pm clear PACKAGE");
14421458
System.err.println(" pm enable PACKAGE_OR_COMPONENT");

core/java/android/app/ApplicationPackageManager.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -971,13 +971,25 @@ public void installPackage(Uri packageURI, IPackageInstallObserver observer, int
971971
}
972972
}
973973

974+
@Override
975+
public void installPackageWithOrigin(Uri packageURI, IPackageInstallObserver observer,
976+
int flags, String installerPackageName, Uri originatingURI, Uri referrer) {
977+
try {
978+
mPM.installPackageWithOrigin(packageURI, observer, flags, null, originatingURI,
979+
referrer);
980+
} catch (RemoteException e) {
981+
// Should never happen!
982+
}
983+
}
984+
974985
@Override
975986
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
976987
int flags, String installerPackageName, Uri verificationURI,
977-
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
988+
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams,
989+
Uri originatingURI, Uri referrer) {
978990
try {
979991
mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
980-
verificationURI, manifestDigest, encryptionParams);
992+
verificationURI, manifestDigest, encryptionParams, originatingURI, referrer);
981993
} catch (RemoteException e) {
982994
// Should never happen!
983995
}

core/java/android/content/Intent.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@
571571
* <li> {@link #EXTRA_INITIAL_INTENTS}
572572
* <li> {@link #EXTRA_INTENT}
573573
* <li> {@link #EXTRA_KEY_EVENT}
574-
* <li> {@link #EXTRA_ORIGINATING_URL}
574+
* <li> {@link #EXTRA_ORIGINATING_URI}
575575
* <li> {@link #EXTRA_PHONE_NUMBER}
576576
* <li> {@link #EXTRA_REFERRER}
577577
* <li> {@link #EXTRA_REMOTE_INTENT_TOKEN}
@@ -1288,17 +1288,17 @@ public static Intent createChooser(Intent target, CharSequence title) {
12881288
= "android.intent.extra.NOT_UNKNOWN_SOURCE";
12891289

12901290
/**
1291-
* Used as a string extra field with {@link #ACTION_INSTALL_PACKAGE} and
1292-
* {@link #ACTION_VIEW} to indicate the URL from which the local APK in the Intent
1291+
* Used as a URI extra field with {@link #ACTION_INSTALL_PACKAGE} and
1292+
* {@link #ACTION_VIEW} to indicate the URI from which the local APK in the Intent
12931293
* data field originated from.
12941294
*/
1295-
public static final String EXTRA_ORIGINATING_URL
1296-
= "android.intent.extra.ORIGINATING_URL";
1295+
public static final String EXTRA_ORIGINATING_URI
1296+
= "android.intent.extra.ORIGINATING_URI";
12971297

12981298
/**
1299-
* Used as a string extra field with {@link #ACTION_INSTALL_PACKAGE} and
1300-
* {@link #ACTION_VIEW} to indicate the HTTP referrer associated with the Intent
1301-
* data field or {@link #EXTRA_ORIGINATING_URL}.
1299+
* Used as a URI extra field with {@link #ACTION_INSTALL_PACKAGE} and
1300+
* {@link #ACTION_VIEW} to indicate the HTTP referrer URI associated with the Intent
1301+
* data field or {@link #EXTRA_ORIGINATING_URI}.
13021302
*/
13031303
public static final String EXTRA_REFERRER
13041304
= "android.intent.extra.REFERRER";

core/java/android/content/pm/IPackageManager.aidl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ interface IPackageManager {
352352
String nextPackageToClean(String lastPackage);
353353

354354
void movePackage(String packageName, IPackageMoveObserver observer, int flags);
355-
355+
356356
boolean addPermissionAsync(in PermissionInfo info);
357357

358358
boolean setInstallLocation(int loc);
@@ -363,9 +363,14 @@ interface IPackageManager {
363363
void setUserName(int userId, String name);
364364
ParcelFileDescriptor setUserIcon(int userId);
365365

366+
void installPackageWithOrigin(in Uri packageURI, in IPackageInstallObserver observer,
367+
int flags, in String installerPackageName, in Uri originatingURI,
368+
in Uri referrer);
369+
366370
void installPackageWithVerification(in Uri packageURI, in IPackageInstallObserver observer,
367371
int flags, in String installerPackageName, in Uri verificationURI,
368-
in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams);
372+
in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams,
373+
in Uri originatingURI, in Uri referrer);
369374

370375
void verifyPendingInstall(int id, int verificationCode);
371376

core/java/android/content/pm/PackageManager.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2193,6 +2193,33 @@ public abstract void installPackage(
21932193
Uri packageURI, IPackageInstallObserver observer, int flags,
21942194
String installerPackageName);
21952195

2196+
/**
2197+
* Similar to
2198+
* {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
2199+
* with references to the location of where the package originated from.
2200+
*
2201+
* @param packageURI The location of the package file to install. This can
2202+
* be a 'file:' or a 'content:' URI.
2203+
* @param observer An observer callback to get notified when the package
2204+
* installation is complete.
2205+
* {@link IPackageInstallObserver#packageInstalled(String, int)}
2206+
* will be called when that happens. observer may be null to
2207+
* indicate that no callback is desired.
2208+
* @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
2209+
* {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
2210+
* @param installerPackageName Optional package name of the application that
2211+
* is performing the installation. This identifies which market
2212+
* the package came from.
2213+
* @param originatingURI URI referencing where the package was downloaded
2214+
* from. May be {@code null}.
2215+
* @param referrer HTTP referrer URI associated with the originatingURI.
2216+
* May be {@code null}.
2217+
* @hide
2218+
*/
2219+
public abstract void installPackageWithOrigin(
2220+
Uri packageURI, IPackageInstallObserver observer, int flags,
2221+
String installerPackageName, Uri originatingURI, Uri referrer);
2222+
21962223
/**
21972224
* Similar to
21982225
* {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
@@ -2219,12 +2246,17 @@ public abstract void installPackage(
22192246
* @param encryptionParams if the package to be installed is encrypted,
22202247
* these parameters describing the encryption and authentication
22212248
* used. May be {@code null}.
2249+
* @param originatingURI URI referencing where the package was downloaded
2250+
* from. May be {@code null}.
2251+
* @param referrer HTTP referrer URI associated with the originatingURI.
2252+
* May be {@code null}.
22222253
* @hide
22232254
*/
22242255
public abstract void installPackageWithVerification(Uri packageURI,
22252256
IPackageInstallObserver observer, int flags, String installerPackageName,
22262257
Uri verificationURI, ManifestDigest manifestDigest,
2227-
ContainerEncryptionParams encryptionParams);
2258+
ContainerEncryptionParams encryptionParams, Uri originatingURI,
2259+
Uri referrer);
22282260

22292261
/**
22302262
* Allows a package listening to the

services/java/com/android/server/pm/PackageManagerService.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5335,13 +5335,21 @@ public void installPackage(
53355335
final Uri packageURI, final IPackageInstallObserver observer, final int flags,
53365336
final String installerPackageName) {
53375337
installPackageWithVerification(packageURI, observer, flags, installerPackageName, null,
5338-
null, null);
5338+
null, null, null, null);
5339+
}
5340+
5341+
public void installPackageWithOrigin(
5342+
Uri packageURI, IPackageInstallObserver observer, int flags,
5343+
String installerPackageName, Uri originatingURI, Uri referrer) {
5344+
installPackageWithVerification(packageURI, observer, flags, installerPackageName, null,
5345+
null, null, originatingURI, referrer);
53395346
}
53405347

53415348
@Override
53425349
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
53435350
int flags, String installerPackageName, Uri verificationURI,
5344-
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
5351+
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams,
5352+
Uri originatingURI, Uri referrer) {
53455353
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
53465354

53475355
final int uid = Binder.getCallingUid();
@@ -5359,7 +5367,7 @@ public void installPackageWithVerification(Uri packageURI, IPackageInstallObserv
53595367

53605368
final Message msg = mHandler.obtainMessage(INIT_COPY);
53615369
msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
5362-
verificationURI, manifestDigest, encryptionParams);
5370+
verificationURI, manifestDigest, encryptionParams, originatingURI, referrer);
53635371
mHandler.sendMessage(msg);
53645372
}
53655373

@@ -5795,18 +5803,22 @@ class InstallParams extends HandlerParams {
57955803
private int mRet;
57965804
private File mTempPackage;
57975805
final ContainerEncryptionParams encryptionParams;
5806+
final Uri originatingURI;
5807+
final Uri referrer;
57985808

57995809
InstallParams(Uri packageURI,
58005810
IPackageInstallObserver observer, int flags,
58015811
String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest,
5802-
ContainerEncryptionParams encryptionParams) {
5812+
ContainerEncryptionParams encryptionParams, Uri originatingURI, Uri referrer) {
58035813
this.mPackageURI = packageURI;
58045814
this.flags = flags;
58055815
this.observer = observer;
58065816
this.installerPackageName = installerPackageName;
58075817
this.verificationURI = verificationURI;
58085818
this.manifestDigest = manifestDigest;
58095819
this.encryptionParams = encryptionParams;
5820+
this.originatingURI = originatingURI;
5821+
this.referrer = referrer;
58105822
}
58115823

58125824
private int installLocationPolicy(PackageInfoLite pkgLite, int flags) {
@@ -6002,6 +6014,14 @@ public void handleStartCopy() throws RemoteException {
60026014
verificationURI);
60036015
}
60046016

6017+
if (originatingURI != null) {
6018+
verification.putExtra(Intent.EXTRA_ORIGINATING_URI, originatingURI);
6019+
}
6020+
6021+
if (referrer != null) {
6022+
verification.putExtra(Intent.EXTRA_REFERRER, referrer);
6023+
}
6024+
60056025
final PackageVerificationState verificationState = new PackageVerificationState(
60066026
requiredUid, args);
60076027

test-runner/src/android/test/mock/MockPackageManager.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,17 @@ public void updateUserFlags(int id, int flags) {
563563
@Override
564564
public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
565565
int flags, String installerPackageName, Uri verificationURI,
566-
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
566+
ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams,
567+
Uri originatingURI, Uri referrer) {
568+
throw new UnsupportedOperationException();
569+
}
570+
571+
/**
572+
* @hide
573+
*/
574+
@Override
575+
public void installPackageWithOrigin(Uri packageURI, IPackageInstallObserver observer,
576+
int flags, String installerPackageName, Uri originatingURI, Uri referrer) {
567577
throw new UnsupportedOperationException();
568578
}
569579

0 commit comments

Comments
 (0)