Merge changes I66723a00,I07f8182d
* changes: Enforce MEDIA_CONTENT_CONTROL in verifyPackageName Simplify if/else branch in MR2ServiceImpl
This commit is contained in:
committed by
Android (Google) Code Review
commit
6b9c2948e0
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user