Merge "Fix package verification with multi-user" into jb-mr1-dev

This commit is contained in:
rich cannings
2012-10-02 16:23:09 -07:00
committed by Android (Google) Code Review

View File

@@ -851,7 +851,8 @@ public class PackageManagerService extends IPackageManager.Stub {
state.setVerifierResponse(Binder.getCallingUid(), state.setVerifierResponse(Binder.getCallingUid(),
PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT); PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
broadcastPackageVerified(verificationId, args.packageURI, broadcastPackageVerified(verificationId, args.packageURI,
PackageManager.VERIFICATION_ALLOW); PackageManager.VERIFICATION_ALLOW,
state.getInstallArgs().getUser());
try { try {
ret = args.copyApk(mContainerService, true); ret = args.copyApk(mContainerService, true);
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -859,7 +860,8 @@ public class PackageManagerService extends IPackageManager.Stub {
} }
} else { } else {
broadcastPackageVerified(verificationId, args.packageURI, broadcastPackageVerified(verificationId, args.packageURI,
PackageManager.VERIFICATION_REJECT); PackageManager.VERIFICATION_REJECT,
state.getInstallArgs().getUser());
} }
processPendingInstall(args, ret); processPendingInstall(args, ret);
@@ -889,7 +891,7 @@ public class PackageManagerService extends IPackageManager.Stub {
if (state.isInstallAllowed()) { if (state.isInstallAllowed()) {
ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR; ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
broadcastPackageVerified(verificationId, args.packageURI, broadcastPackageVerified(verificationId, args.packageURI,
response.code); response.code, state.getInstallArgs().getUser());
try { try {
ret = args.copyApk(mContainerService, true); ret = args.copyApk(mContainerService, true);
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -5741,14 +5743,15 @@ public class PackageManagerService extends IPackageManager.Stub {
} }
private void broadcastPackageVerified(int verificationId, Uri packageUri, private void broadcastPackageVerified(int verificationId, Uri packageUri,
int verificationCode) { int verificationCode, UserHandle user) {
final Intent intent = new Intent(Intent.ACTION_PACKAGE_VERIFIED); final Intent intent = new Intent(Intent.ACTION_PACKAGE_VERIFIED);
intent.setDataAndType(packageUri, PACKAGE_MIME_TYPE); intent.setDataAndType(packageUri, PACKAGE_MIME_TYPE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(PackageManager.EXTRA_VERIFICATION_ID, verificationId); intent.putExtra(PackageManager.EXTRA_VERIFICATION_ID, verificationId);
intent.putExtra(PackageManager.EXTRA_VERIFICATION_RESULT, verificationCode); intent.putExtra(PackageManager.EXTRA_VERIFICATION_RESULT, verificationCode);
mContext.sendBroadcast(intent, android.Manifest.permission.PACKAGE_VERIFICATION_AGENT); mContext.sendBroadcastAsUser(intent, user,
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT);
} }
private ComponentName matchComponentForVerifier(String packageName, private ComponentName matchComponentForVerifier(String packageName,
@@ -6477,7 +6480,7 @@ public class PackageManagerService extends IPackageManager.Stub {
final Intent sufficientIntent = new Intent(verification); final Intent sufficientIntent = new Intent(verification);
sufficientIntent.setComponent(verifierComponent); sufficientIntent.setComponent(verifierComponent);
mContext.sendBroadcast(sufficientIntent); mContext.sendBroadcastAsUser(sufficientIntent, getUser());
} }
} }
} }
@@ -6492,7 +6495,7 @@ public class PackageManagerService extends IPackageManager.Stub {
* target BroadcastReceivers have run. * target BroadcastReceivers have run.
*/ */
verification.setComponent(requiredVerifierComponent); verification.setComponent(requiredVerifierComponent);
mContext.sendOrderedBroadcast(verification, mContext.sendOrderedBroadcastAsUser(verification, getUser(),
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
new BroadcastReceiver() { new BroadcastReceiver() {
@Override @Override
@@ -6779,6 +6782,10 @@ public class PackageManagerService extends IPackageManager.Stub {
protected boolean isFwdLocked() { protected boolean isFwdLocked() {
return (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0; return (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;
} }
UserHandle getUser() {
return user;
}
} }
class FileInstallArgs extends InstallArgs { class FileInstallArgs extends InstallArgs {