Merge "Clean up permissions when uids are no longer used"
am: 9235821478
Change-Id: I3c06a36368abb9a1e7885d281ea1155fce857eea
This commit is contained in:
@@ -100,6 +100,9 @@ public class PermissionMonitor {
|
|||||||
app.requestedPermissionsFlags);
|
app.requestedPermissionsFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// The last package of this uid is removed from device. Clean the package up.
|
||||||
|
permission = INetd.PERMISSION_UNINSTALLED;
|
||||||
}
|
}
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
@@ -470,6 +473,7 @@ public class PermissionMonitor {
|
|||||||
ArrayList<Integer> allPermissionAppIds = new ArrayList<>();
|
ArrayList<Integer> allPermissionAppIds = new ArrayList<>();
|
||||||
ArrayList<Integer> internetPermissionAppIds = new ArrayList<>();
|
ArrayList<Integer> internetPermissionAppIds = new ArrayList<>();
|
||||||
ArrayList<Integer> updateStatsPermissionAppIds = new ArrayList<>();
|
ArrayList<Integer> updateStatsPermissionAppIds = new ArrayList<>();
|
||||||
|
ArrayList<Integer> noPermissionAppIds = new ArrayList<>();
|
||||||
ArrayList<Integer> uninstalledAppIds = new ArrayList<>();
|
ArrayList<Integer> uninstalledAppIds = new ArrayList<>();
|
||||||
for (int i = 0; i < netdPermissionsAppIds.size(); i++) {
|
for (int i = 0; i < netdPermissionsAppIds.size(); i++) {
|
||||||
int permissions = netdPermissionsAppIds.valueAt(i);
|
int permissions = netdPermissionsAppIds.valueAt(i);
|
||||||
@@ -484,8 +488,10 @@ public class PermissionMonitor {
|
|||||||
updateStatsPermissionAppIds.add(netdPermissionsAppIds.keyAt(i));
|
updateStatsPermissionAppIds.add(netdPermissionsAppIds.keyAt(i));
|
||||||
break;
|
break;
|
||||||
case INetd.NO_PERMISSIONS:
|
case INetd.NO_PERMISSIONS:
|
||||||
uninstalledAppIds.add(netdPermissionsAppIds.keyAt(i));
|
noPermissionAppIds.add(netdPermissionsAppIds.keyAt(i));
|
||||||
break;
|
break;
|
||||||
|
case INetd.PERMISSION_UNINSTALLED:
|
||||||
|
uninstalledAppIds.add(netdPermissionsAppIds.keyAt(i));
|
||||||
default:
|
default:
|
||||||
Log.e(TAG, "unknown permission type: " + permissions + "for uid: "
|
Log.e(TAG, "unknown permission type: " + permissions + "for uid: "
|
||||||
+ netdPermissionsAppIds.keyAt(i));
|
+ netdPermissionsAppIds.keyAt(i));
|
||||||
@@ -506,8 +512,12 @@ public class PermissionMonitor {
|
|||||||
mNetd.trafficSetNetPermForUids(INetd.PERMISSION_UPDATE_DEVICE_STATS,
|
mNetd.trafficSetNetPermForUids(INetd.PERMISSION_UPDATE_DEVICE_STATS,
|
||||||
ArrayUtils.convertToIntArray(updateStatsPermissionAppIds));
|
ArrayUtils.convertToIntArray(updateStatsPermissionAppIds));
|
||||||
}
|
}
|
||||||
if (uninstalledAppIds.size() != 0) {
|
if (noPermissionAppIds.size() != 0) {
|
||||||
mNetd.trafficSetNetPermForUids(INetd.NO_PERMISSIONS,
|
mNetd.trafficSetNetPermForUids(INetd.NO_PERMISSIONS,
|
||||||
|
ArrayUtils.convertToIntArray(noPermissionAppIds));
|
||||||
|
}
|
||||||
|
if (uninstalledAppIds.size() != 0) {
|
||||||
|
mNetd.trafficSetNetPermForUids(INetd.PERMISSION_UNINSTALLED,
|
||||||
ArrayUtils.convertToIntArray(uninstalledAppIds));
|
ArrayUtils.convertToIntArray(uninstalledAppIds));
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
|||||||
@@ -501,7 +501,7 @@ public class PermissionMonitorTest {
|
|||||||
|
|
||||||
when(mPackageManager.getPackagesForUid(MOCK_UID1)).thenReturn(new String[]{});
|
when(mPackageManager.getPackagesForUid(MOCK_UID1)).thenReturn(new String[]{});
|
||||||
mObserver.onPackageRemoved(MOCK_PACKAGE1, MOCK_UID1);
|
mObserver.onPackageRemoved(MOCK_PACKAGE1, MOCK_UID1);
|
||||||
mNetdServiceMonitor.expectPermission(INetd.NO_PERMISSIONS, new int[]{MOCK_UID1});
|
mNetdServiceMonitor.expectPermission(INetd.PERMISSION_UNINSTALLED, new int[]{MOCK_UID1});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -515,7 +515,7 @@ public class PermissionMonitorTest {
|
|||||||
// Remove and install the same package to simulate the update action
|
// Remove and install the same package to simulate the update action
|
||||||
when(mPackageManager.getPackagesForUid(MOCK_UID1)).thenReturn(new String[]{});
|
when(mPackageManager.getPackagesForUid(MOCK_UID1)).thenReturn(new String[]{});
|
||||||
mObserver.onPackageRemoved(MOCK_PACKAGE1, MOCK_UID1);
|
mObserver.onPackageRemoved(MOCK_PACKAGE1, MOCK_UID1);
|
||||||
mNetdServiceMonitor.expectPermission(INetd.NO_PERMISSIONS, new int[]{MOCK_UID1});
|
mNetdServiceMonitor.expectPermission(INetd.PERMISSION_UNINSTALLED, new int[]{MOCK_UID1});
|
||||||
|
|
||||||
addPackage(MOCK_PACKAGE1, MOCK_UID1, new String[] {INTERNET});
|
addPackage(MOCK_PACKAGE1, MOCK_UID1, new String[] {INTERNET});
|
||||||
mNetdServiceMonitor.expectPermission(INetd.PERMISSION_INTERNET, new int[]{MOCK_UID1});
|
mNetdServiceMonitor.expectPermission(INetd.PERMISSION_INTERNET, new int[]{MOCK_UID1});
|
||||||
|
|||||||
Reference in New Issue
Block a user