Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29ad9c8a authored by Mohammad Samiul Islam's avatar Mohammad Samiul Islam Committed by Android (Google) Code Review
Browse files

Merge "Create VerificationParams directly"

parents f5abcaa4 b59292ee
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -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() {
+26 −34
Original line number Diff line number Diff line
@@ -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