Verify URI permissions for notification shortcutIcon.

Bug: 277593270
Test: atest NotificationManagerServiceTest
Change-Id: Iaf2a9a82f18e018e60e6cdc020da6ebf7267e8b1
This commit is contained in:
Ioana Alexandru
2023-04-27 14:55:28 +00:00
parent 0a1937e1d2
commit 9e87f6019a
2 changed files with 70 additions and 19 deletions

View File

@@ -2846,6 +2846,8 @@ public class Notification implements Parcelable
}
}
}
visitIconUri(visitor, extras.getParcelable(EXTRA_CONVERSATION_ICON));
}
if (isStyle(CallStyle.class) & extras != null) {

View File

@@ -4429,6 +4429,8 @@ 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 smallIcon = Icon.createWithContentUri("content://media/small/icon");
final Icon largeIcon = Icon.createWithContentUri("content://media/large/icon");
final Icon personIcon1 = Icon.createWithContentUri("content://media/person1");
final Icon personIcon2 = Icon.createWithContentUri("content://media/person2");
final Icon personIcon3 = Icon.createWithContentUri("content://media/person3");
@@ -4462,7 +4464,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.setSmallIcon(smallIcon)
.setLargeIcon(largeIcon)
.addExtras(extras)
.build();
@@ -4470,6 +4473,8 @@ 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(smallIcon.getUri()));
verify(visitor, times(1)).accept(eq(largeIcon.getUri()));
verify(visitor, times(1)).accept(eq(personIcon1.getUri()));
verify(visitor, times(1)).accept(eq(personIcon2.getUri()));
verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
@@ -4477,6 +4482,68 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(visitor, times(1)).accept(eq(historyUri2));
}
@Test
public void testVisitUris_audioContentsString() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
Bundle extras = new Bundle();
extras.putString(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents.toString());
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.addExtras(extras)
.build();
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(audioContents));
}
@Test
public void testVisitUris_messagingStyle() {
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 1")
.setIcon(personIcon1)
.build();
final Person person2 = new Person.Builder()
.setName("Messaging Person 2")
.setIcon(personIcon2)
.build();
final Person person3 = new Person.Builder()
.setName("Messaging Person 3")
.setIcon(personIcon3)
.build();
Icon shortcutIcon = Icon.createWithContentUri("content://media/shortcut");
Notification.Builder builder = new Notification.Builder(mContext, "a")
.setCategory(Notification.CATEGORY_MESSAGE)
.setContentTitle("new message!")
.setContentText("Conversation Notification")
.setSmallIcon(android.R.drawable.sym_def_app_icon);
Notification.MessagingStyle.Message message1 = new Notification.MessagingStyle.Message(
"Marco?", System.currentTimeMillis(), person2);
Notification.MessagingStyle.Message message2 = new Notification.MessagingStyle.Message(
"Polo!", System.currentTimeMillis(), person3);
Notification.MessagingStyle style = new Notification.MessagingStyle(person1)
.addMessage(message1)
.addMessage(message2)
.setShortcutIcon(shortcutIcon);
builder.setStyle(style);
Notification n = builder.build();
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(shortcutIcon.getUri()));
verify(visitor, times(1)).accept(eq(personIcon1.getUri()));
verify(visitor, times(1)).accept(eq(personIcon2.getUri()));
verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
}
@Test
public void testVisitUris_callStyle() {
Icon personIcon = Icon.createWithContentUri("content://media/person");
@@ -4500,24 +4567,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(visitor, times(1)).accept(eq(verificationIcon.getUri()));
}
@Test
public void testVisitUris_audioContentsString() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
Bundle extras = new Bundle();
extras.putString(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents.toString());
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.addExtras(extras)
.build();
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(audioContents));
}
@Test
public void testSetNotificationPolicy_preP_setOldFields() {
ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);