Verify URI permissions for EXTRA_REMOTE_INPUT_HISTORY_ITEMS.

Also added the person URIs in the test, since they weren't being
checked.

Test: atest NotificationManagerServiceTest & tested with POC from bug
Bug: 276729064
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e0d8602a0200ba92283463bd54cefcf97394bfa8)
Merged-In: I848545f7aee202495c515f47a32871a2cb6ae707
Change-Id: I848545f7aee202495c515f47a32871a2cb6ae707
This commit is contained in:
Ioana Alexandru
2023-04-21 15:39:22 +00:00
parent cd993dd7e0
commit a8078ff43d
2 changed files with 43 additions and 0 deletions

View File

@@ -2510,6 +2510,17 @@ public class Notification implements Parcelable
if (person != null && person.getIconUri() != null) {
visitor.accept(person.getIconUri());
}
final RemoteInputHistoryItem[] history = (RemoteInputHistoryItem[])
extras.getParcelableArray(Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS);
if (history != null) {
for (int i = 0; i < history.length; i++) {
RemoteInputHistoryItem item = history[i];
if (item.getUri() != null) {
visitor.accept(item.getUri());
}
}
}
}
if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) {

View File

@@ -102,6 +102,7 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Person;
import android.app.RemoteInput;
import android.app.RemoteInputHistoryItem;
import android.app.StatsManager;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.usage.UsageStatsManagerInternal;
@@ -4267,10 +4268,36 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
public void testVisitUris() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
final Uri backgroundImage = Uri.parse("content://com.example/background");
final Icon personIcon1 = Icon.createWithContentUri("content://media/person1");
final Icon personIcon2 = Icon.createWithContentUri("content://media/person2");
final Icon personIcon3 = Icon.createWithContentUri("content://media/person3");
final Person person1 = new Person.Builder()
.setName("Messaging Person")
.setIcon(personIcon1)
.build();
final Person person2 = new Person.Builder()
.setName("People List Person 1")
.setIcon(personIcon2)
.build();
final Person person3 = new Person.Builder()
.setName("People List Person 2")
.setIcon(personIcon3)
.build();
final Uri historyUri1 = Uri.parse("content://com.example/history1");
final Uri historyUri2 = Uri.parse("content://com.example/history2");
final RemoteInputHistoryItem historyItem1 = new RemoteInputHistoryItem(null, historyUri1,
"a");
final RemoteInputHistoryItem historyItem2 = new RemoteInputHistoryItem(null, historyUri2,
"b");
Bundle extras = new Bundle();
extras.putParcelable(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents);
extras.putString(Notification.EXTRA_BACKGROUND_IMAGE_URI, backgroundImage.toString());
extras.putParcelable(Notification.EXTRA_MESSAGING_PERSON, person1);
extras.putParcelableArrayList(Notification.EXTRA_PEOPLE_LIST,
new ArrayList<>(Arrays.asList(person2, person3)));
extras.putParcelableArray(Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
new RemoteInputHistoryItem[]{historyItem1, historyItem2});
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
@@ -4282,6 +4309,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(audioContents));
verify(visitor, times(1)).accept(eq(backgroundImage));
verify(visitor, times(1)).accept(eq(personIcon1.getUri()));
verify(visitor, times(1)).accept(eq(personIcon2.getUri()));
verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
verify(visitor, times(1)).accept(eq(historyUri1));
verify(visitor, times(1)).accept(eq(historyUri2));
}
@Test