Split package and permission lock.

The first milestone towards mainlining permission.

Bug: 158736025
Test: manual
Change-Id: I01246d446ff34a43ff7e954569f4422cee942f24
This commit is contained in:
Hai Zhang
2020-10-29 14:07:30 -07:00
parent 27154a1372
commit 37fb8182cc
3 changed files with 9 additions and 14 deletions

View File

@@ -2737,7 +2737,7 @@ public class PackageManagerService extends IPackageManager.Stub
context, lock, installer, installLock, new PackageAbiHelperImpl(),
backgroundHandler,
(i, pm) -> new ComponentResolver(i.getUserManagerService(), pm.mPmInternal, lock),
(i, pm) -> PermissionManagerService.create(context, lock),
(i, pm) -> PermissionManagerService.create(context),
(i, pm) -> new UserManagerService(context, pm,
new UserDataPreparer(installer, installLock, context, onlyCore),
lock),

View File

@@ -208,7 +208,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
/** Lock to protect internal data access */
private final Object mLock;
private final Object mLock = new Object();
/** Internal connection to the package manager */
private final PackageManagerInternal mPackageManagerInt;
@@ -365,14 +365,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
}
};
PermissionManagerService(Context context,
@NonNull Object externalLock) {
this(context, externalLock, new Injector(context));
PermissionManagerService(@NonNull Context context) {
this(context, new Injector(context));
}
@VisibleForTesting
PermissionManagerService(Context context, @NonNull Object externalLock,
@NonNull Injector injector) {
PermissionManagerService(@NonNull Context context, @NonNull Injector injector) {
mInjector = injector;
// The package info cache is the cache for package and permission information.
// Disable the package info and package permission caches locally but leave the
@@ -381,7 +379,6 @@ public class PermissionManagerService extends IPermissionManager.Stub {
mInjector.disablePackageNamePermissionCache();
mContext = context;
mLock = externalLock;
mPackageManagerInt = LocalServices.getService(PackageManagerInternal.class);
mUserManagerInt = LocalServices.getService(UserManagerInternal.class);
mAppOpsManager = context.getSystemService(AppOpsManager.class);
@@ -440,8 +437,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
* NOTE: The external lock is temporary and should be removed. This needs to be a
* lock created by the permission manager itself.
*/
public static PermissionManagerServiceInternal create(Context context,
@NonNull Object externalLock) {
@NonNull
public static PermissionManagerServiceInternal create(@NonNull Context context) {
final PermissionManagerServiceInternal permMgrInt =
LocalServices.getService(PermissionManagerServiceInternal.class);
if (permMgrInt != null) {
@@ -450,8 +447,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
PermissionManagerService permissionService =
(PermissionManagerService) ServiceManager.getService("permissionmgr");
if (permissionService == null) {
permissionService =
new PermissionManagerService(context, externalLock);
permissionService = new PermissionManagerService(context);
ServiceManager.addService("permissionmgr", permissionService);
}
return LocalServices.getService(PermissionManagerServiceInternal.class);

View File

@@ -69,8 +69,7 @@ public class PermissionManagerServiceTest {
MockitoAnnotations.initMocks(this);
mContext = InstrumentationRegistry.getContext();
Object lock = new Object();
mPermissionManagerService = new PermissionManagerService(mContext, lock, mInjector);
mPermissionManagerService = new PermissionManagerService(mContext, mInjector);
}
@After