Skip to content

Commit 9866d60

Browse files
rich canningsAndroid (Google) Code Review
authored andcommitted
Merge "Pass URLs to package verifiers" into jb-mr1-dev
2 parents 8ab2dc2 + 2471390 commit 9866d60

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)