Merge changes I66723a00,I07f8182d

* changes:
  Enforce MEDIA_CONTENT_CONTROL in verifyPackageName
  Simplify if/else branch in MR2ServiceImpl
This commit is contained in:
TreeHugger Robot
2023-01-05 12:49:00 +00:00
committed by Android (Google) Code Review
4 changed files with 21 additions and 35 deletions

View File

@@ -50,8 +50,7 @@ interface IMediaRouterService {
// MediaRouterService.java for readability.
// Methods for MediaRouter2
boolean verifyPackageName(String clientPackageName);
void enforceMediaContentControlPermission();
boolean verifyPackageExists(String clientPackageName);
List<MediaRoute2Info> getSystemRoutes();
RoutingSessionInfo getSystemSessionInfo();

View File

@@ -208,9 +208,9 @@ public final class MediaRouter2 {
IMediaRouterService.Stub.asInterface(
ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE));
try {
// SecurityException will be thrown if there's no permission.
serviceBinder.enforceMediaContentControlPermission();
if (!serviceBinder.verifyPackageName(clientPackageName)) {
// verifyPackageExists throws SecurityException if the caller doesn't hold
// MEDIA_CONTENT_CONTROL permission.
if (!serviceBinder.verifyPackageExists(clientPackageName)) {
Log.e(TAG, "Package " + clientPackageName + " not found. Ignoring.");
return null;
}

View File

@@ -169,29 +169,22 @@ class MediaRouter2ServiceImpl {
// Start of methods that implement MediaRouter2 operations.
@NonNull
public boolean verifyPackageName(@NonNull String clientPackageName) {
final long token = Binder.clearCallingIdentity();
try {
PackageManager pm = mContext.getPackageManager();
pm.getPackageInfo(clientPackageName, PackageManager.PackageInfoFlags.of(0));
return true;
} catch (PackageManager.NameNotFoundException ex) {
return false;
} finally {
Binder.restoreCallingIdentity(token);
}
}
@NonNull
public void enforceMediaContentControlPermission() {
public boolean verifyPackageExists(@NonNull String clientPackageName) {
final int pid = Binder.getCallingPid();
final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
try {
mContext.enforcePermission(Manifest.permission.MEDIA_CONTENT_CONTROL, pid, uid,
mContext.enforcePermission(
Manifest.permission.MEDIA_CONTENT_CONTROL,
pid,
uid,
"Must hold MEDIA_CONTENT_CONTROL permission.");
PackageManager pm = mContext.getPackageManager();
pm.getPackageInfo(clientPackageName, PackageManager.PackageInfoFlags.of(0));
return true;
} catch (PackageManager.NameNotFoundException ex) {
return false;
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -1959,12 +1952,12 @@ class MediaRouter2ServiceImpl {
@NonNull RoutingSessionInfo oldSession, @NonNull MediaRoute2Info route) {
try {
if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission) {
routerRecord.mRouter.requestCreateSessionByManager(uniqueRequestId,
oldSession, mSystemProvider.getDefaultRoute());
} else {
routerRecord.mRouter.requestCreateSessionByManager(uniqueRequestId,
oldSession, route);
// The router lacks permission to modify system routing, so we hide system
// route info from them.
route = mSystemProvider.getDefaultRoute();
}
routerRecord.mRouter.requestCreateSessionByManager(
uniqueRequestId, oldSession, route);
} catch (RemoteException ex) {
Slog.w(TAG, "getSessionHintsForCreatingSessionOnHandler: "
+ "Failed to request. Router probably died.", ex);

View File

@@ -380,14 +380,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub
// Binder call
@Override
public boolean verifyPackageName(String clientPackageName) {
return mService2.verifyPackageName(clientPackageName);
}
// Binder call
@Override
public void enforceMediaContentControlPermission() {
mService2.enforceMediaContentControlPermission();
public boolean verifyPackageExists(String clientPackageName) {
return mService2.verifyPackageExists(clientPackageName);
}
// Binder call