Merge "Move more methods accessing PermissionsState into PermissionManagerService."

This commit is contained in:
Hai Zhang
2020-08-06 20:02:28 +00:00
committed by Android (Google) Code Review
4 changed files with 80 additions and 22 deletions

View File

@@ -52,6 +52,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.internal.util.XmlUtils;
import com.android.server.pm.parsing.PackageInfoUtils;
import com.android.server.pm.parsing.pkg.AndroidPackage;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import libcore.io.IoUtils;
import libcore.util.HexEncoding;
@@ -112,6 +113,7 @@ class InstantAppRegistry {
private static final String ATTR_GRANTED = "granted";
private final PackageManagerService mService;
private final PermissionManagerServiceInternal mPermissionManager;
private final CookiePersistence mCookiePersistence;
/** State for uninstalled instant apps */
@@ -131,8 +133,10 @@ class InstantAppRegistry {
@GuardedBy("mService.mLock")
private SparseArray<SparseBooleanArray> mInstalledInstantAppUids;
public InstantAppRegistry(PackageManagerService service) {
public InstantAppRegistry(PackageManagerService service,
PermissionManagerServiceInternal permissionManager) {
mService = service;
mPermissionManager = permissionManager;
mCookiePersistence = new CookiePersistence(BackgroundThread.getHandler().getLooper());
}
@@ -861,7 +865,8 @@ class InstantAppRegistry {
String[] requestedPermissions = new String[pkg.getRequestedPermissions().size()];
pkg.getRequestedPermissions().toArray(requestedPermissions);
Set<String> permissions = ps.getPermissionsState().getPermissions(userId);
Set<String> permissions = mPermissionManager.getGrantedPermissions(
pkg.getPackageName(), userId);
String[] grantedPermissions = new String[permissions.size()];
permissions.toArray(grantedPermissions);

View File

@@ -2970,7 +2970,7 @@ public class PackageManagerService extends IPackageManager.Stub
mHandler = new PackageHandler(mHandlerThread.getLooper());
mProcessLoggingHandler = new ProcessLoggingHandler();
Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
mInstantAppRegistry = new InstantAppRegistry(this);
mInstantAppRegistry = new InstantAppRegistry(this, mPermissionManager);
ArrayMap<String, SystemConfig.SharedLibraryEntry> libConfig
= systemConfig.getSharedLibraries();
@@ -4385,14 +4385,13 @@ public class PackageManagerService extends IPackageManager.Stub
final PackageUserState state = ps.readUserState(userId);
AndroidPackage p = ps.pkg;
if (p != null) {
final PermissionsState permissionsState = ps.getPermissionsState();
// Compute GIDs only if requested
final int[] gids = (flags & PackageManager.GET_GIDS) == 0
? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
? EMPTY_INT_ARRAY : mPermissionManager.getPackageGids(ps.name, userId);
// Compute granted permissions only if package has requested permissions
final Set<String> permissions = ArrayUtils.isEmpty(p.getRequestedPermissions())
? Collections.emptySet() : permissionsState.getPermissions(userId);
? Collections.emptySet()
: mPermissionManager.getGrantedPermissions(ps.name, userId);
PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags,
ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId, ps);
@@ -4863,13 +4862,13 @@ public class PackageManagerService extends IPackageManager.Stub
}
// TODO: Shouldn't this be checking for package installed state for userId and
// return null?
return ps.getPermissionsState().computeGids(userId);
return mPermissionManager.getPackageGids(packageName, userId);
}
if ((flags & MATCH_KNOWN_PACKAGES) != 0) {
final PackageSetting ps = mSettings.mPackages.get(packageName);
if (ps != null && ps.isMatch(flags)
&& !shouldFilterApplicationLocked(ps, callingUid, userId)) {
return ps.getPermissionsState().computeGids(userId);
return mPermissionManager.getPackageGids(packageName, userId);
}
}
}
@@ -24948,9 +24947,7 @@ public class PackageManagerService extends IPackageManager.Stub
@Override
public int[] getPermissionGids(String permissionName, int userId) {
synchronized (mLock) {
return getPermissionGidsLocked(permissionName, userId);
}
return mPermissionManager.getPermissionGids(permissionName, userId);
}
@Override
@@ -25271,16 +25268,6 @@ public class PackageManagerService extends IPackageManager.Stub
return null;
}
@GuardedBy("mLock")
public int[] getPermissionGidsLocked(String permissionName, int userId) {
BasePermission perm
= mPermissionManager.getPermissionSettings().getPermission(permissionName);
if (perm != null) {
return perm.computeGids(userId);
}
return null;
}
@Override
public int getRuntimePermissionsVersion(@UserIdInt int userId) {
Preconditions.checkArgumentNonnegative(userId);

View File

@@ -2454,6 +2454,36 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
}
@NonNull
private Set<String> getGrantedPermissions(@NonNull String packageName,
@UserIdInt int userId) {
final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName);
if (ps == null) {
return null;
}
final PermissionsState permissionsState = ps.getPermissionsState();
return permissionsState.getPermissions(userId);
}
@Nullable
private int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) {
BasePermission permission = mSettings.getPermission(permissionName);
if (permission == null) {
return null;
}
return permission.computeGids(userId);
}
@Nullable
private int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) {
final PackageSetting ps = mPackageManagerInt.getPackageSetting(packageName);
if (ps == null) {
return null;
}
final PermissionsState permissionsState = ps.getPermissionsState();
return permissionsState.computeGids(userId);
}
/**
* Restore the permission state for a package.
*
@@ -4650,6 +4680,22 @@ public class PermissionManagerService extends IPermissionManager.Stub {
public void removeAllPermissions(AndroidPackage pkg, boolean chatty) {
PermissionManagerService.this.removeAllPermissions(pkg, chatty);
}
@NonNull
@Override
public Set<String> getGrantedPermissions(@NonNull String packageName,
@UserIdInt int userId) {
return PermissionManagerService.this.getGrantedPermissions(packageName, userId);
}
@Nullable
@Override
public int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId) {
return PermissionManagerService.this.getPermissionGids(permissionName, userId);
}
@Nullable
@Override
public int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId) {
return PermissionManagerService.this.getPackageGids(packageName, userId);
}
@Override
public void grantRequestedRuntimePermissions(AndroidPackage pkg, int[] userIds,
String[] grantedPermissions, int callingUid) {

View File

@@ -28,6 +28,7 @@ import com.android.server.pm.parsing.pkg.AndroidPackage;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
/**
@@ -263,6 +264,25 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager
public abstract void addAllPermissionGroups(@NonNull AndroidPackage pkg, boolean chatty);
public abstract void removeAllPermissions(@NonNull AndroidPackage pkg, boolean chatty);
/**
* Get all the permissions granted to a package.
*/
@NonNull
public abstract Set<String> getGrantedPermissions(@NonNull String packageName,
@UserIdInt int userId);
/**
* Get the GIDs of a permission.
*/
@Nullable
public abstract int[] getPermissionGids(@NonNull String permissionName, @UserIdInt int userId);
/**
* Get the GIDs computed from the permission state of a package.
*/
@Nullable
public abstract int[] getPackageGids(@NonNull String packageName, @UserIdInt int userId);
/** Retrieve the packages that have requested the given app op permission */
public abstract @Nullable String[] getAppOpPermissionPackages(
@NonNull String permName, int callingUid);