summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andy Yu <chingtangyu@google.com> 2023-01-05 12:55:25 -0800
committer Andy Yu <chingtangyu@google.com> 2023-01-05 15:19:50 -0800
commit8630254ec87d1f407cb5a818eb8e5fad19e0a87d (patch)
treefc386ac5180924d789d40f83df6080dd173cf581
parent947220afcbd23b0bf845653fa9afd1ca648c7182 (diff)
Add QUERY_ALL_PACKAGES permission to getInterventionList
To guard query information from apps and only allow system and shell command. Bug: 249056757 Test: atest GameManagerServiceTests Change-Id: I5855b887d99b5fae0471bda98dcd2d86134032ba
-rw-r--r--services/core/java/com/android/server/app/GameManagerService.java2
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java28
2 files changed, 30 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index 46d3ff1273ec..d7386183e905 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -1762,7 +1762,9 @@ public final class GameManagerService extends IGameManagerService.Stub {
/**
* Returns the string listing all the interventions currently set to a game.
*/
+ @RequiresPermission(Manifest.permission.QUERY_ALL_PACKAGES)
public String getInterventionList(String packageName, int userId) {
+ checkPermission(Manifest.permission.QUERY_ALL_PACKAGES);
final GamePackageConfiguration packageConfig = getConfig(packageName, userId);
final StringBuilder listStrSb = new StringBuilder();
if (packageConfig == null) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
index d3fa92ce68d7..94cfa42868b0 100644
--- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
@@ -262,6 +262,16 @@ public class GameManagerServiceTests {
mTestLooper.dispatchAll();
}
+ private void mockQueryAllPackageGranted() {
+ mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES,
+ PackageManager.PERMISSION_GRANTED);
+ }
+
+ private void mockQueryAllPackageDenied() {
+ mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES,
+ PackageManager.PERMISSION_DENIED);
+ }
+
private void mockManageUsersGranted() {
mMockContext.setPermission(Manifest.permission.MANAGE_USERS,
PackageManager.PERMISSION_GRANTED);
@@ -2180,4 +2190,22 @@ public class GameManagerServiceTests {
verify(mMockPowerManager, never()).setPowerMode(anyInt(), anyBoolean());
assertFalse(gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE));
}
+
+ @Test
+ public void testGetInterventionList_permissionDenied() throws Exception {
+ String configString = "mode=2,downscaleFactor=0.5";
+ when(DeviceConfig.getProperty(anyString(), anyString()))
+ .thenReturn(configString);
+ mockQueryAllPackageDenied();
+ GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1);
+ assertThrows(SecurityException.class,
+ () -> gameManagerService.getInterventionList(mPackageName, USER_ID_1));
+
+ mockQueryAllPackageGranted();
+ String expectedInterventionListOutput = "\n[Name:" + mPackageName
+ + " Modes: {2=[Game Mode:2,Scaling:0.5,Use Angle:false,"
+ + "Fps:,Loading Boost Duration:-1]}]";
+ assertEquals(expectedInterventionListOutput,
+ gameManagerService.getInterventionList(mPackageName, USER_ID_1));
+ }
}