OSDN Git Service

Always create grant structures when persistable.
authorJeff Sharkey <jsharkey@android.com>
Wed, 21 Dec 2016 20:27:04 +0000 (13:27 -0700)
committerJeff Sharkey <jsharkey@android.com>
Wed, 21 Dec 2016 20:27:07 +0000 (13:27 -0700)
Certain apps may already hold permissions to an underlying provider,
but they expect APIs like takePersistableUriPermission() and
getPersistedUriPermissions() to work when a permission grant was
extended with FLAG_GRANT_PERSISTABLE_URI_PERMISSION.

Test: builds, boots
Bug: 31239684
Change-Id: I4b21c57956b70133ecadb50d0d3ee339f41e2260

services/core/java/com/android/server/am/ActivityManagerService.java

index eae4905..cacba37 100644 (file)
@@ -8154,6 +8154,12 @@ public class ActivityManagerService extends IActivityManager.Stub
             }
         }
 
+        // If we're extending a persistable grant, then we always need to create
+        // the grant data structure so that take/release APIs work
+        if ((modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0) {
+            return targetUid;
+        }
+
         if (targetUid >= 0) {
             // First...  does the target actually need this permission?
             if (checkHoldingPermissionsLocked(pm, pi, grantUri, targetUid, modeFlags)) {