Merge "Allow multiple verdicts from the same verifier."
This commit is contained in:
committed by
Android (Google) Code Review
commit
e830c6b55f
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user