summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fyodor Kupolov <fkupolov@google.com> 2016-06-22 22:28:37 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-06-22 22:28:38 +0000
commitf9f2c7ceefa1348c57f1070327cf5d36c9c0d8d5 (patch)
treeda639bf353964497050b3dd3a2085227547c9229
parentaeef7c47487e5aafa68563399e9a9088d01fa04c (diff)
parent9bbaacf845f6f387cd6e16834da50f7c1a0b451f (diff)
Merge "Use granted userId to look up provider info" into nyc-dev
-rw-r--r--core/java/android/content/ContentResolver.java2
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java31
2 files changed, 7 insertions, 26 deletions
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index aeda7a24066d..c8d89204d8d4 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1819,6 +1819,7 @@ public abstract class ContentResolver {
* calling app. That is, the returned permissions have been granted
* <em>to</em> the calling app. Only persistable grants taken with
* {@link #takePersistableUriPermission(Uri, int)} are returned.
+ * <p>Note: Some of the returned URIs may not be usable until after the user is unlocked.
*
* @see #takePersistableUriPermission(Uri, int)
* @see #releasePersistableUriPermission(Uri, int)
@@ -1837,6 +1838,7 @@ public abstract class ContentResolver {
* calling app. That is, the returned permissions have been granted
* <em>from</em> the calling app. Only grants taken with
* {@link #takePersistableUriPermission(Uri, int)} are returned.
+ * <p>Note: Some of the returned URIs may not be usable until after the user is unlocked.
*/
public @NonNull List<UriPermission> getOutgoingPersistedUriPermissions() {
try {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 61a5282b4561..d1ee634cb95f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8337,7 +8337,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final IPackageManager pm = AppGlobals.getPackageManager();
final String authority = grantUri.uri.getAuthority();
final ProviderInfo pi = getProviderInfoLocked(authority, grantUri.sourceUserId,
- MATCH_DEBUG_TRIAGED_MISSING);
+ MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
if (pi == null) {
Slog.w(TAG, "No content provider found for permission revoke: "
+ grantUri.toSafeString());
@@ -8435,7 +8435,7 @@ public final class ActivityManagerService extends ActivityManagerNative
final String authority = uri.getAuthority();
final ProviderInfo pi = getProviderInfoLocked(authority, userId,
- MATCH_DEBUG_TRIAGED_MISSING);
+ MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
if (pi == null) {
Slog.w(TAG, "No content provider found for permission revoke: "
+ uri.toSafeString());
@@ -8832,10 +8832,11 @@ public final class ActivityManagerService extends ActivityManagerNative
Preconditions.checkNotNull(packageName, "packageName");
final int callingUid = Binder.getCallingUid();
+ final int callingUserId = UserHandle.getUserId(callingUid);
final IPackageManager pm = AppGlobals.getPackageManager();
try {
- final int packageUid = pm.getPackageUid(packageName, MATCH_DEBUG_TRIAGED_MISSING,
- UserHandle.getUserId(callingUid));
+ final int packageUid = pm.getPackageUid(packageName,
+ MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, callingUserId);
if (packageUid != callingUid) {
throw new SecurityException(
"Package " + packageName + " does not belong to calling UID " + callingUid);
@@ -8852,30 +8853,8 @@ public final class ActivityManagerService extends ActivityManagerNative
if (perms == null) {
Slog.w(TAG, "No permission grants found for " + packageName);
} else {
- final int userId = UserHandle.getUserId(callingUid);
- Set<String> existingAuthorities = null;
-
for (UriPermission perm : perms.values()) {
if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) {
- // Is this provider available in the current boot state? If the user
- // is not running and unlocked we check if the provider package exists.
- if (!mUserController.isUserRunningLocked(userId,
- ActivityManager.FLAG_AND_UNLOCKED)) {
- String authority = perm.uri.uri.getAuthority();
- if (existingAuthorities == null
- || !existingAuthorities.contains(authority)) {
- ProviderInfo providerInfo = getProviderInfoLocked(authority,
- userId, MATCH_DEBUG_TRIAGED_MISSING);
- if (providerInfo != null) {
- if (existingAuthorities == null) {
- existingAuthorities = new ArraySet<>();
- }
- existingAuthorities.add(authority);
- } else {
- continue;
- }
- }
- }
result.add(perm.buildPersistedPublicApiObject());
}
}