summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java27
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java60
2 files changed, 39 insertions, 48 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index fc94e08cc0e6..09c109adae4b 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -1764,21 +1764,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
private void verifyNonStaged(List<PackageInstallerSession> childSessions)
throws PackageManagerException {
- final PackageManagerService.ActiveInstallSession verifyingSession =
- makeSessionActiveForVerification();
+ final PackageManagerService.VerificationParams verifyingSession =
+ makeVerificationParams();
if (verifyingSession == null) {
return;
}
if (isMultiPackage()) {
- List<PackageManagerService.ActiveInstallSession> verifyingChildSessions =
+ List<PackageManagerService.VerificationParams> verifyingChildSessions =
new ArrayList<>(childSessions.size());
boolean success = true;
PackageManagerException failure = null;
for (int i = 0; i < childSessions.size(); ++i) {
final PackageInstallerSession session = childSessions.get(i);
try {
- final PackageManagerService.ActiveInstallSession verifyingChildSession =
- session.makeSessionActiveForVerification();
+ final PackageManagerService.VerificationParams verifyingChildSession =
+ session.makeVerificationParams();
if (verifyingChildSession != null) {
verifyingChildSessions.add(verifyingChildSession);
}
@@ -1846,10 +1846,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
/**
* Stages this session for verification and returns a
- * {@link PackageManagerService.ActiveInstallSession} representing this new staged state or null
+ * {@link PackageManagerService.VerificationParams} representing this new staged state or null
* in case permissions need to be requested before verification can proceed.
*/
- private PackageManagerService.ActiveInstallSession makeSessionActiveForVerification()
+ @Nullable
+ private PackageManagerService.VerificationParams makeVerificationParams()
throws PackageManagerException {
assertNotLocked("makeSessionActive");
@@ -1890,12 +1891,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
synchronized (mLock) {
- return makeSessionActiveForVerificationLocked();
+ return makeVerificationParamsLocked();
}
}
@GuardedBy("mLock")
- private PackageManagerService.ActiveInstallSession makeSessionActiveForVerificationLocked()
+ private PackageManagerService.VerificationParams makeVerificationParamsLocked()
throws PackageManagerException {
if (!params.isMultiPackage) {
Objects.requireNonNull(mPackageName);
@@ -1991,11 +1992,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
mRelinquished = true;
- // TODO(159331446): create VerificationParams directly by passing information that is
- // required for verification only
- return new PackageManagerService.ActiveInstallSession(mPackageName, stageDir,
- localObserver, sessionId, params, mInstallerUid, mInstallSource, user,
- mSigningDetails);
+
+ return mPm.new VerificationParams(user, stageDir, localObserver, params,
+ mInstallSource, mInstallerUid, mSigningDetails, sessionId);
}
private void onVerificationComplete() {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index aecc8ddec3d8..e82018f4be24 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -12889,17 +12889,16 @@ public class PackageManagerService extends IPackageManager.Stub
mHandler.sendMessage(msg);
}
- void verifyStage(ActiveInstallSession activeInstallSession) {
- final VerificationParams params = new VerificationParams(activeInstallSession);
+ void verifyStage(VerificationParams params) {
mHandler.post(()-> {
params.startCopy();
});
}
- void verifyStage(ActiveInstallSession parent, List<ActiveInstallSession> children)
+ void verifyStage(VerificationParams parent, List<VerificationParams> children)
throws PackageManagerException {
final MultiPackageVerificationParams params =
- new MultiPackageVerificationParams(UserHandle.ALL, parent, children);
+ new MultiPackageVerificationParams(parent, children);
mHandler.post(()-> {
params.startCopy();
});
@@ -15072,27 +15071,25 @@ public class PackageManagerService extends IPackageManager.Stub
*/
class MultiPackageVerificationParams extends HandlerParams {
private final IPackageInstallObserver2 mObserver;
- private final ArrayList<VerificationParams> mChildParams;
+ private final List<VerificationParams> mChildParams;
private final Map<VerificationParams, Integer> mVerificationState;
MultiPackageVerificationParams(
- @NonNull UserHandle user,
- @NonNull ActiveInstallSession parent,
- @NonNull List<ActiveInstallSession> activeInstallSessions)
+ VerificationParams parent,
+ List<VerificationParams> children)
throws PackageManagerException {
- super(user);
- if (activeInstallSessions.size() == 0) {
+ super(parent.getUser());
+ if (children.size() == 0) {
throw new PackageManagerException("No child sessions found!");
}
- mChildParams = new ArrayList<>(activeInstallSessions.size());
- for (int i = 0; i < activeInstallSessions.size(); i++) {
- final VerificationParams childParams =
- new VerificationParams(activeInstallSessions.get(i));
+ mChildParams = children;
+ // Provide every child with reference to this object as parent
+ for (int i = 0; i < children.size(); i++) {
+ final VerificationParams childParams = children.get(i);
childParams.mParentVerificationParams = this;
- this.mChildParams.add(childParams);
}
this.mVerificationState = new ArrayMap<>(mChildParams.size());
- mObserver = parent.getObserver();
+ mObserver = parent.observer;
}
@Override
@@ -15150,31 +15147,26 @@ public class PackageManagerService extends IPackageManager.Stub
private boolean mWaitForEnableRollbackToComplete;
private int mRet;
- VerificationParams(ActiveInstallSession activeInstallSession) {
- super(activeInstallSession.getUser());
- final PackageInstaller.SessionParams sessionParams =
- activeInstallSession.getSessionParams();
- if (DEBUG_INSTANT) {
- if ((sessionParams.installFlags
- & PackageManager.INSTALL_INSTANT_APP) != 0) {
- Slog.d(TAG, "Ephemeral install of " + activeInstallSession.getPackageName());
- }
- }
+ VerificationParams(UserHandle user, File stagedDir, IPackageInstallObserver2 observer,
+ PackageInstaller.SessionParams sessionParams, InstallSource installSource,
+ int installerUid, SigningDetails signingDetails, int sessionId) {
+ super(user);
+ origin = OriginInfo.fromStagedFile(stagedDir);
+ this.observer = observer;
+ installFlags = sessionParams.installFlags;
+ this.installSource = installSource;
+ packageAbiOverride = sessionParams.abiOverride;
verificationInfo = new VerificationInfo(
sessionParams.originatingUri,
sessionParams.referrerUri,
sessionParams.originatingUid,
- activeInstallSession.getInstallerUid());
- origin = OriginInfo.fromStagedFile(activeInstallSession.getStagedDir());
- observer = activeInstallSession.getObserver();
- installFlags = sessionParams.installFlags;
- installSource = activeInstallSession.getInstallSource();
- packageAbiOverride = sessionParams.abiOverride;
- signingDetails = activeInstallSession.getSigningDetails();
+ installerUid
+ );
+ this.signingDetails = signingDetails;
requiredInstalledVersionCode = sessionParams.requiredInstalledVersionCode;
mDataLoaderType = (sessionParams.dataLoaderParams != null)
? sessionParams.dataLoaderParams.getType() : DataLoaderType.NONE;
- mSessionId = activeInstallSession.getSessionId();
+ mSessionId = sessionId;
}
@Override