Merge "Enforce package visibility to the api getAppOpPermissionPackages"
This commit is contained in:
@@ -10134,7 +10134,22 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
if (getInstantAppPackageName(getCallingUid()) != null) {
|
||||
return EmptyArray.STRING;
|
||||
}
|
||||
return mPermissionManager.getAppOpPermissionPackages(permissionName);
|
||||
final int callingUid = Binder.getCallingUid();
|
||||
final int callingUserId = UserHandle.getUserId(callingUid);
|
||||
|
||||
final ArraySet<String> packageNames = new ArraySet(
|
||||
mPermissionManager.getAppOpPermissionPackages(permissionName));
|
||||
synchronized (mLock) {
|
||||
for (int i = packageNames.size() - 1; i >= 0; i--) {
|
||||
final String packageName = packageNames.valueAt(i);
|
||||
if (!shouldFilterApplicationLocked(mSettings.getPackageLPr(packageName),
|
||||
callingUid, callingUserId)) {
|
||||
continue;
|
||||
}
|
||||
packageNames.removeAt(i);
|
||||
}
|
||||
}
|
||||
return packageNames.toArray(new String[packageNames.size()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
<!-- Load additional APKs onto device -->
|
||||
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
|
||||
<option name="push" value="AppEnumerationSyncProviderTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationSyncProviderTestApp.apk" />
|
||||
<option name="push" value="AppEnumerationHasAppOpPermissionTestApp.apk->/data/local/tmp/appenumerationtests/AppEnumerationHasAppOpPermissionTestApp.apk" />
|
||||
</target_preparer>
|
||||
|
||||
<option name="test-tag" value="AppEnumerationInternalTest" />
|
||||
|
||||
@@ -43,8 +43,16 @@ public class AppEnumerationInternalTests {
|
||||
private static final String TEST_DATA_PATH = "/data/local/tmp/appenumerationtests/";
|
||||
private static final String SYNC_PROVIDER_APK_PATH =
|
||||
TEST_DATA_PATH + "AppEnumerationSyncProviderTestApp.apk";
|
||||
private static final String SYNC_PROVIDER_PKG_NAME = "com.android.appenumeration.syncprovider";
|
||||
private static final String SYNC_PROVIDER_AUTHORITY = SYNC_PROVIDER_PKG_NAME;
|
||||
private static final String HAS_APPOP_PERMISSION_APK_PATH =
|
||||
TEST_DATA_PATH + "AppEnumerationHasAppOpPermissionTestApp.apk";
|
||||
|
||||
private static final String TARGET_SYNC_PROVIDER = "com.android.appenumeration.syncprovider";
|
||||
private static final String TARGET_HAS_APPOP_PERMISSION =
|
||||
"com.android.appenumeration.hasappoppermission";
|
||||
|
||||
private static final String SYNC_PROVIDER_AUTHORITY = TARGET_SYNC_PROVIDER;
|
||||
private static final String PERMISSION_REQUEST_INSTALL_PACKAGES =
|
||||
"android.permission.REQUEST_INSTALL_PACKAGES";
|
||||
|
||||
private IPackageManager mIPackageManager;
|
||||
|
||||
@@ -55,7 +63,8 @@ public class AppEnumerationInternalTests {
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
uninstallPackage(SYNC_PROVIDER_PKG_NAME);
|
||||
uninstallPackage(TARGET_SYNC_PROVIDER);
|
||||
uninstallPackage(TARGET_HAS_APPOP_PERMISSION);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -67,7 +76,7 @@ public class AppEnumerationInternalTests {
|
||||
|
||||
assertThat(names).contains(SYNC_PROVIDER_AUTHORITY);
|
||||
assertThat(infos.stream().map(info -> info.packageName).collect(Collectors.toList()))
|
||||
.contains(SYNC_PROVIDER_PKG_NAME);
|
||||
.contains(TARGET_SYNC_PROVIDER);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -79,7 +88,27 @@ public class AppEnumerationInternalTests {
|
||||
|
||||
assertThat(names).doesNotContain(SYNC_PROVIDER_AUTHORITY);
|
||||
assertThat(infos.stream().map(info -> info.packageName).collect(Collectors.toList()))
|
||||
.doesNotContain(SYNC_PROVIDER_PKG_NAME);
|
||||
.doesNotContain(TARGET_SYNC_PROVIDER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppOpPermissionPackages_canSeeForceQueryable() throws Exception {
|
||||
installPackage(HAS_APPOP_PERMISSION_APK_PATH, true /* forceQueryable */);
|
||||
|
||||
final String[] packageNames = mIPackageManager.getAppOpPermissionPackages(
|
||||
PERMISSION_REQUEST_INSTALL_PACKAGES);
|
||||
|
||||
assertThat(packageNames).asList().contains(TARGET_HAS_APPOP_PERMISSION);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppOpPermissionPackages_cannotSeeHasAppOpPermission() throws Exception {
|
||||
installPackage(HAS_APPOP_PERMISSION_APK_PATH, false /* forceQueryable */);
|
||||
|
||||
final String[] packageNames = mIPackageManager.getAppOpPermissionPackages(
|
||||
PERMISSION_REQUEST_INSTALL_PACKAGES);
|
||||
|
||||
assertThat(packageNames).asList().doesNotContain(TARGET_HAS_APPOP_PERMISSION);
|
||||
}
|
||||
|
||||
private static void installPackage(String apkPath, boolean forceQueryable) {
|
||||
|
||||
@@ -34,3 +34,17 @@ android_test_helper_app {
|
||||
test_suites: ["device-tests"],
|
||||
platform_apis: true,
|
||||
}
|
||||
|
||||
android_test_helper_app {
|
||||
name: "AppEnumerationHasAppOpPermissionTestApp",
|
||||
srcs: ["src/**/*.java"],
|
||||
manifest: "AndroidManifest-hasAppOpPermission.xml",
|
||||
dex_preopt: {
|
||||
enabled: false,
|
||||
},
|
||||
optimize: {
|
||||
enabled: false,
|
||||
},
|
||||
test_suites: ["device-tests"],
|
||||
platform_apis: true,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2021 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.appenumeration.hasappoppermission">
|
||||
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<application>
|
||||
<uses-library android:name="android.test.runner" />
|
||||
</application>
|
||||
</manifest>
|
||||
Reference in New Issue
Block a user