Loading services/core/java/com/android/server/pm/PackageInstallerSession.java +13 −14 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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"); Loading Loading @@ -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); Loading Loading @@ -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() { Loading services/core/java/com/android/server/pm/PackageManagerService.java +26 −34 Original line number Diff line number Diff line Loading @@ -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(); }); Loading Loading @@ -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 Loading Loading @@ -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 Loading
services/core/java/com/android/server/pm/PackageInstallerSession.java +13 −14 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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"); Loading Loading @@ -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); Loading Loading @@ -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() { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +26 −34 Original line number Diff line number Diff line Loading @@ -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(); }); Loading Loading @@ -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 Loading Loading @@ -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