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

Commit e830c6b5 authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "Allow multiple verdicts from the same verifier."

parents 5c5931c7 d4a3fc30
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ class PackageVerificationState {
    private final SparseBooleanArray mSufficientVerifierUids;

    private final SparseBooleanArray mRequiredVerifierUids;
    private final SparseBooleanArray mUnrespondedRequiredVerifierUids;

    private boolean mSufficientVerificationComplete;

@@ -52,6 +53,7 @@ class PackageVerificationState {
        mVerifyingSession = verifyingSession;
        mSufficientVerifierUids = new SparseBooleanArray();
        mRequiredVerifierUids = new SparseBooleanArray();
        mUnrespondedRequiredVerifierUids = new SparseBooleanArray();
        mRequiredVerificationComplete = false;
        mRequiredVerificationPassed = true;
        mExtendedTimeout = false;
@@ -64,6 +66,7 @@ class PackageVerificationState {
    /** Add the user ID of the required package verifier. */
    void addRequiredVerifierUid(int uid) {
        mRequiredVerifierUids.put(uid, true);
        mUnrespondedRequiredVerifierUids.put(uid, true);
    }

    /** Returns true if the uid a required verifier. */
@@ -103,8 +106,8 @@ class PackageVerificationState {
                    mRequiredVerificationPassed = false;
            }

            mRequiredVerifierUids.delete(uid);
            if (mRequiredVerifierUids.size() == 0) {
            mUnrespondedRequiredVerifierUids.delete(uid);
            if (mUnrespondedRequiredVerifierUids.size() == 0) {
                mRequiredVerificationComplete = true;
            }
            return true;
@@ -129,7 +132,7 @@ class PackageVerificationState {
     * Mark the session as passed required verification.
     */
    void passRequiredVerification() {
        if (mRequiredVerifierUids.size() > 0) {
        if (mUnrespondedRequiredVerifierUids.size() > 0) {
            throw new RuntimeException("Required verifiers still present.");
        }
        mRequiredVerificationPassed = true;
+21 −0
Original line number Diff line number Diff line
@@ -329,6 +329,27 @@ public class PackageVerificationStateTest extends AndroidTestCase {
                state.isInstallAllowed());
    }

    public void testAreAllVerificationsComplete_timeoutSuccessWithSufficient() {
        PackageVerificationState state = new PackageVerificationState(null);

        state.addRequiredVerifierUid(REQUIRED_UID_1);
        state.addSufficientVerifier(SUFFICIENT_UID_1);

        assertFalse(state.areAllVerificationsComplete());
        assertFalse(state.isVerificationComplete());
        assertFalse(state.isInstallAllowed());

        // Required verifier responded, but still waiting for sufficient.
        state.setVerifierResponse(REQUIRED_UID_1, PackageManager.VERIFICATION_ALLOW);
        assertFalse(state.isVerificationComplete());

        // Timeout, verification complete and installation allowed.
        state.setVerifierResponse(REQUIRED_UID_1,
                PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
        assertTrue(state.isVerificationComplete());
        assertTrue(state.isInstallAllowed());
    }

    public void testAreAllVerificationsComplete_onlyVerificationPasses() {
        PackageVerificationState state = new PackageVerificationState(null);
        state.addRequiredVerifierUid(REQUIRED_UID_1);