Merge "Fix transfer API." into rvc-qpr-dev am: 92d9af6c47
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12478084 Change-Id: I9cc0cc4e7856f22f6917a2e22b6d40a3494142df
This commit is contained in:
@@ -1291,9 +1291,8 @@ public class PackageInstaller {
|
|||||||
*
|
*
|
||||||
* @throws PackageManager.NameNotFoundException if the new owner could not be found.
|
* @throws PackageManager.NameNotFoundException if the new owner could not be found.
|
||||||
* @throws SecurityException if called after the session has been committed or abandoned.
|
* @throws SecurityException if called after the session has been committed or abandoned.
|
||||||
* @throws SecurityException if the session does not update the original installer
|
* @throws IllegalArgumentException if streams opened through
|
||||||
* @throws SecurityException if streams opened through
|
* {@link #openWrite(String, long, long) are still open.
|
||||||
* {@link #openWrite(String, long, long) are still open.
|
|
||||||
*/
|
*/
|
||||||
public void transfer(@NonNull String packageName)
|
public void transfer(@NonNull String packageName)
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
|
|||||||
@@ -267,6 +267,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
/** Uid of the creator of this session. */
|
/** Uid of the creator of this session. */
|
||||||
private final int mOriginalInstallerUid;
|
private final int mOriginalInstallerUid;
|
||||||
|
|
||||||
|
/** Package name of the app that created the installation session. */
|
||||||
|
private final String mOriginalInstallerPackageName;
|
||||||
|
|
||||||
/** Uid of the owner of the installer session */
|
/** Uid of the owner of the installer session */
|
||||||
@GuardedBy("mLock")
|
@GuardedBy("mLock")
|
||||||
private int mInstallerUid;
|
private int mInstallerUid;
|
||||||
@@ -556,6 +559,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
mOriginalInstallerUid = installerUid;
|
mOriginalInstallerUid = installerUid;
|
||||||
mInstallerUid = installerUid;
|
mInstallerUid = installerUid;
|
||||||
mInstallSource = Objects.requireNonNull(installSource);
|
mInstallSource = Objects.requireNonNull(installSource);
|
||||||
|
mOriginalInstallerPackageName = mInstallSource.installerPackageName;
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.createdMillis = createdMillis;
|
this.createdMillis = createdMillis;
|
||||||
this.updatedMillis = createdMillis;
|
this.updatedMillis = createdMillis;
|
||||||
@@ -1666,11 +1670,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
throw new IllegalArgumentException("Package is not valid", e);
|
throw new IllegalArgumentException("Package is not valid", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mPackageName.equals(mInstallSource.installerPackageName)) {
|
|
||||||
throw new SecurityException("Can only transfer sessions that update the original "
|
|
||||||
+ "installer");
|
|
||||||
}
|
|
||||||
|
|
||||||
mInstallerUid = newOwnerAppInfo.uid;
|
mInstallerUid = newOwnerAppInfo.uid;
|
||||||
mInstallSource = InstallSource.create(packageName, null, packageName);
|
mInstallSource = InstallSource.create(packageName, null, packageName);
|
||||||
}
|
}
|
||||||
@@ -2157,6 +2156,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mInstallerUid != mOriginalInstallerUid) {
|
||||||
|
// Session has been transferred, check package name.
|
||||||
|
if (TextUtils.isEmpty(mPackageName) || !mPackageName.equals(
|
||||||
|
mOriginalInstallerPackageName)) {
|
||||||
|
throw new PackageManagerException(PackageManager.INSTALL_FAILED_PACKAGE_CHANGED,
|
||||||
|
"Can only transfer sessions that update the original installer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (params.mode == SessionParams.MODE_FULL_INSTALL) {
|
if (params.mode == SessionParams.MODE_FULL_INSTALL) {
|
||||||
// Full installs must include a base package
|
// Full installs must include a base package
|
||||||
if (!stagedSplits.contains(null)) {
|
if (!stagedSplits.contains(null)) {
|
||||||
@@ -3182,6 +3190,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
|
|
||||||
pw.printPair("userId", userId);
|
pw.printPair("userId", userId);
|
||||||
pw.printPair("mOriginalInstallerUid", mOriginalInstallerUid);
|
pw.printPair("mOriginalInstallerUid", mOriginalInstallerUid);
|
||||||
|
pw.printPair("mOriginalInstallerPackageName", mOriginalInstallerPackageName);
|
||||||
pw.printPair("installerPackageName", mInstallSource.installerPackageName);
|
pw.printPair("installerPackageName", mInstallSource.installerPackageName);
|
||||||
pw.printPair("installInitiatingPackageName", mInstallSource.initiatingPackageName);
|
pw.printPair("installInitiatingPackageName", mInstallSource.initiatingPackageName);
|
||||||
pw.printPair("installOriginatingPackageName", mInstallSource.originatingPackageName);
|
pw.printPair("installOriginatingPackageName", mInstallSource.originatingPackageName);
|
||||||
|
|||||||
Reference in New Issue
Block a user