Merge "DO NOT MERGE Revert "Verify URI permissions in MediaMetadata"" into tm-qpr-dev
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index b459cfe..cc4895f 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -22,8 +22,6 @@
 import android.annotation.RequiresPermission;
 import android.app.PendingIntent;
 import android.content.ComponentName;
-import android.content.ContentProvider;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -65,9 +63,6 @@
 import android.util.Log;
 import android.view.KeyEvent;
 
-import com.android.server.LocalServices;
-import com.android.server.uri.UriGrantsManagerInternal;
-
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -83,10 +78,6 @@
 // TODO(jaewan): Do not call service method directly -- introduce listener instead.
 public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionRecordImpl {
     private static final String TAG = "MediaSessionRecord";
-    private static final String[] ART_URIS = new String[] {
-            MediaMetadata.METADATA_KEY_ALBUM_ART_URI,
-            MediaMetadata.METADATA_KEY_ART_URI,
-            MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI};
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     /**
@@ -140,7 +131,6 @@
     private final SessionStub mSession;
     private final SessionCb mSessionCb;
     private final MediaSessionService mService;
-    private final UriGrantsManagerInternal mUgmInternal;
     private final Context mContext;
     private final boolean mVolumeAdjustmentForRemoteGroupSessions;
 
@@ -202,7 +192,6 @@
         mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         mAudioAttrs = DEFAULT_ATTRIBUTES;
         mPolicies = policies;
-        mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class);
         mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
 
@@ -1029,45 +1018,21 @@
         public void setMetadata(MediaMetadata metadata, long duration, String metadataDescription)
                 throws RemoteException {
             synchronized (mLock) {
+                MediaMetadata temp = metadata == null ? null : new MediaMetadata.Builder(metadata)
+                        .build();
+                // This is to guarantee that the underlying bundle is unparceled
+                // before we set it to prevent concurrent reads from throwing an
+                // exception
+                if (temp != null) {
+                    temp.size();
+                }
+                mMetadata = temp;
                 mDuration = duration;
                 mMetadataDescription = metadataDescription;
-                mMetadata = sanitizeMediaMetadata(metadata);
             }
             mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
         }
 
-        private MediaMetadata sanitizeMediaMetadata(MediaMetadata metadata) {
-            if (metadata == null) {
-                return null;
-            }
-            MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder(metadata);
-            for (String key: ART_URIS) {
-                String uriString = metadata.getString(key);
-                if (TextUtils.isEmpty(uriString)) {
-                    continue;
-                }
-                Uri uri = Uri.parse(uriString);
-                if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
-                    continue;
-                }
-                try {
-                    mUgmInternal.checkGrantUriPermission(getUid(),
-                            getPackageName(),
-                            ContentProvider.getUriWithoutUserId(uri),
-                            Intent.FLAG_GRANT_READ_URI_PERMISSION,
-                            ContentProvider.getUserIdFromUri(uri, getUserId()));
-                } catch (SecurityException e) {
-                    metadataBuilder.putString(key, null);
-                }
-            }
-            MediaMetadata sanitizedMetadata = metadataBuilder.build();
-            // sanitizedMetadata.size() guarantees that the underlying bundle is unparceled
-            // before we set it to prevent concurrent reads from throwing an
-            // exception
-            sanitizedMetadata.size();
-            return sanitizedMetadata;
-        }
-
         @Override
         public void setPlaybackState(PlaybackState state) throws RemoteException {
             int oldState = mPlaybackState == null