diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 27 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 60 |
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 |