Merge "Grant visibility even when not granting URI perm" into rvc-dev am: 32ff9bfad4 am: 3f73a90f1a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12211280 Change-Id: I9f8562b9f3a16807e6ec0fd77b54287647d0e054
This commit is contained in:
@@ -51,6 +51,7 @@ import android.app.AppGlobals;
|
|||||||
import android.app.GrantedUriPermission;
|
import android.app.GrantedUriPermission;
|
||||||
import android.app.IUriGrantsManager;
|
import android.app.IUriGrantsManager;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.ContentProvider;
|
import android.content.ContentProvider;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -698,6 +699,11 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub {
|
|||||||
final UriPermission perm = findOrCreateUriPermissionLocked(
|
final UriPermission perm = findOrCreateUriPermissionLocked(
|
||||||
sourcePkg, targetPkg, targetUid, grantUri);
|
sourcePkg, targetPkg, targetUid, grantUri);
|
||||||
perm.initPersistedModes(modeFlags, createdTime);
|
perm.initPersistedModes(modeFlags, createdTime);
|
||||||
|
mPmInternal.grantImplicitAccess(
|
||||||
|
targetUserId, null,
|
||||||
|
UserHandle.getAppId(targetUid),
|
||||||
|
pi.applicationInfo.uid,
|
||||||
|
false /* direct */);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Slog.w(TAG, "Persisted grant for " + uri + " had source " + sourcePkg
|
Slog.w(TAG, "Persisted grant for " + uri + " had source " + sourcePkg
|
||||||
@@ -1171,6 +1177,9 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub {
|
|||||||
// grant, we can skip generating any bookkeeping; when any advanced
|
// grant, we can skip generating any bookkeeping; when any advanced
|
||||||
// features have been requested, we proceed below to make sure the
|
// features have been requested, we proceed below to make sure the
|
||||||
// provider supports granting permissions
|
// provider supports granting permissions
|
||||||
|
mPmInternal.grantImplicitAccess(
|
||||||
|
UserHandle.getUserId(targetUid), null,
|
||||||
|
UserHandle.getAppId(targetUid), pi.applicationInfo.uid, false);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,11 +43,19 @@ import static org.junit.Assert.assertFalse;
|
|||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.ArgumentMatchers.isNull;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ProviderInfo;
|
import android.content.pm.ProviderInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
|
|
||||||
import androidx.test.InstrumentationRegistry;
|
import androidx.test.InstrumentationRegistry;
|
||||||
@@ -62,6 +70,12 @@ public class UriGrantsManagerServiceTest {
|
|||||||
private UriGrantsMockContext mContext;
|
private UriGrantsMockContext mContext;
|
||||||
private UriGrantsManagerInternal mService;
|
private UriGrantsManagerInternal mService;
|
||||||
|
|
||||||
|
// we expect the following only during grant if a grant is expected
|
||||||
|
private void verifyNoVisibilityGrant() {
|
||||||
|
verify(mContext.mPmInternal, never())
|
||||||
|
.grantImplicitAccess(anyInt(), any(), anyInt(), anyInt(), anyBoolean());
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
mContext = new UriGrantsMockContext(InstrumentationRegistry.getContext());
|
mContext = new UriGrantsMockContext(InstrumentationRegistry.getContext());
|
||||||
@@ -83,6 +97,7 @@ public class UriGrantsManagerServiceTest {
|
|||||||
assertEquals(UID_PRIMARY_SOCIAL, needed.targetUid);
|
assertEquals(UID_PRIMARY_SOCIAL, needed.targetUid);
|
||||||
assertEquals(FLAG_READ, needed.flags);
|
assertEquals(FLAG_READ, needed.flags);
|
||||||
assertEquals(asSet(expectedGrant), needed.uris);
|
assertEquals(asSet(expectedGrant), needed.uris);
|
||||||
|
verifyNoVisibilityGrant();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,6 +115,7 @@ public class UriGrantsManagerServiceTest {
|
|||||||
assertEquals(UID_SECONDARY_SOCIAL, needed.targetUid);
|
assertEquals(UID_SECONDARY_SOCIAL, needed.targetUid);
|
||||||
assertEquals(FLAG_READ, needed.flags);
|
assertEquals(FLAG_READ, needed.flags);
|
||||||
assertEquals(asSet(expectedGrant), needed.uris);
|
assertEquals(asSet(expectedGrant), needed.uris);
|
||||||
|
verifyNoVisibilityGrant();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,6 +127,8 @@ public class UriGrantsManagerServiceTest {
|
|||||||
final NeededUriGrants needed = mService.checkGrantUriPermissionFromIntent(
|
final NeededUriGrants needed = mService.checkGrantUriPermissionFromIntent(
|
||||||
intent, UID_PRIMARY_PUBLIC, PKG_SOCIAL, USER_PRIMARY);
|
intent, UID_PRIMARY_PUBLIC, PKG_SOCIAL, USER_PRIMARY);
|
||||||
assertNull(needed);
|
assertNull(needed);
|
||||||
|
verify(mContext.mPmInternal).grantImplicitAccess(eq(USER_PRIMARY), isNull(), eq(
|
||||||
|
UserHandle.getAppId(UID_PRIMARY_SOCIAL)), eq(UID_PRIMARY_PUBLIC), eq(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,6 +146,7 @@ public class UriGrantsManagerServiceTest {
|
|||||||
assertEquals(UID_SECONDARY_SOCIAL, needed.targetUid);
|
assertEquals(UID_SECONDARY_SOCIAL, needed.targetUid);
|
||||||
assertEquals(FLAG_READ, needed.flags);
|
assertEquals(FLAG_READ, needed.flags);
|
||||||
assertEquals(asSet(expectedGrant), needed.uris);
|
assertEquals(asSet(expectedGrant), needed.uris);
|
||||||
|
verifyNoVisibilityGrant();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user