Snap for 4447680 from 5a81ab05210d83d0734a3a1b63bf2f3d7b8f4840 to pi-release
Change-Id: I4da97344e94094b2489ced3aa1e8d661b3f8b46a
diff --git a/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java b/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
index 9dd5946..ecb0889 100644
--- a/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
+++ b/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
@@ -16,6 +16,10 @@
package com.android.keychain.internal;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.pm.PackageManager;
import com.android.keychain.TestConfig;
import org.junit.Assert;
import org.junit.Before;
@@ -96,6 +100,33 @@
}
@Test
+ public void testPurgeOldGrantsDoesNotDeleteGrantsForExistingPackages() {
+ mGrantsDB.setGrant(DUMMY_UID, DUMMY_ALIAS, true);
+ PackageManager pm = mock(PackageManager.class);
+ when(pm.getPackagesForUid(DUMMY_UID)).thenReturn(new String[]{"p"});
+ mGrantsDB.purgeOldGrants(pm);
+ Assert.assertTrue(mGrantsDB.hasGrant(DUMMY_UID, DUMMY_ALIAS));
+ }
+
+ @Test
+ public void testPurgeOldGrantsPurgesAllNonExistingPackages() {
+ mGrantsDB.setGrant(DUMMY_UID, DUMMY_ALIAS, true);
+ mGrantsDB.setGrant(DUMMY_UID2, DUMMY_ALIAS, true);
+ PackageManager pm = mock(PackageManager.class);
+ when(pm.getPackagesForUid(DUMMY_UID)).thenReturn(null);
+ when(pm.getPackagesForUid(DUMMY_UID2)).thenReturn(null);
+ mGrantsDB.purgeOldGrants(pm);
+ Assert.assertFalse(mGrantsDB.hasGrant(DUMMY_UID, DUMMY_ALIAS));
+ Assert.assertFalse(mGrantsDB.hasGrant(DUMMY_UID2, DUMMY_ALIAS));
+ }
+
+ @Test
+ public void testPurgeOldGrantsWorksOnEmptyDatabase() {
+ // Check that NPE is not thrown.
+ mGrantsDB.purgeOldGrants(null);
+ }
+
+ @Test
public void testIsUserSelectable() {
Assert.assertFalse(mGrantsDB.isUserSelectable(DUMMY_ALIAS));
mGrantsDB.setIsUserSelectable(DUMMY_ALIAS, true);
diff --git a/src/com/android/keychain/internal/GrantsDatabase.java b/src/com/android/keychain/internal/GrantsDatabase.java
index 4783378..28605b5 100644
--- a/src/com/android/keychain/internal/GrantsDatabase.java
+++ b/src/com/android/keychain/internal/GrantsDatabase.java
@@ -154,19 +154,11 @@
public void purgeOldGrants(PackageManager pm) {
final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
- Cursor cursor = null;
db.beginTransaction();
- try {
- cursor =
- db.query(
- TABLE_GRANTS,
- new String[] {GRANTS_GRANTEE_UID},
- null,
- null,
- GRANTS_GRANTEE_UID,
- null,
- null);
- while (cursor.moveToNext()) {
+ try (Cursor cursor = db.query(
+ TABLE_GRANTS,
+ new String[] {GRANTS_GRANTEE_UID}, null, null, GRANTS_GRANTEE_UID, null, null)) {
+ while ((cursor != null) && (cursor.moveToNext())) {
final int uid = cursor.getInt(0);
final boolean packageExists = pm.getPackagesForUid(uid) != null;
if (packageExists) {
@@ -181,12 +173,9 @@
new String[] {Integer.toString(uid)});
}
db.setTransactionSuccessful();
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.endTransaction();
}
+
+ db.endTransaction();
}
public void setIsUserSelectable(final String alias, final boolean userSelectable) {