OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.notifications; | 5 package org.chromium.chrome.browser.notifications; |
6 | 6 |
7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
8 import android.app.Notification; | 8 import android.app.Notification; |
9 import android.content.Context; | 9 import android.content.Context; |
10 import android.content.res.Resources; | 10 import android.content.res.Resources; |
11 import android.graphics.Bitmap; | 11 import android.graphics.Bitmap; |
12 import android.os.Build; | 12 import android.os.Build; |
13 import android.test.suitebuilder.annotation.LargeTest; | 13 import android.test.suitebuilder.annotation.LargeTest; |
14 import android.test.suitebuilder.annotation.MediumTest; | 14 import android.test.suitebuilder.annotation.MediumTest; |
15 | 15 |
| 16 import org.chromium.base.ThreadUtils; |
16 import org.chromium.base.annotations.SuppressFBWarnings; | 17 import org.chromium.base.annotations.SuppressFBWarnings; |
17 import org.chromium.base.test.util.Feature; | 18 import org.chromium.base.test.util.Feature; |
| 19 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
18 import org.chromium.chrome.browser.preferences.website.ContentSetting; | 20 import org.chromium.chrome.browser.preferences.website.ContentSetting; |
19 import org.chromium.chrome.browser.util.UrlUtilities; | 21 import org.chromium.chrome.browser.util.UrlUtilities; |
20 import org.chromium.chrome.browser.widget.RoundedIconGenerator; | 22 import org.chromium.chrome.browser.widget.RoundedIconGenerator; |
21 import org.chromium.chrome.test.util.browser.notifications.MockNotificationManag
erProxy.NotificationEntry; | 23 import org.chromium.chrome.test.util.browser.notifications.MockNotificationManag
erProxy.NotificationEntry; |
22 | 24 |
23 import java.util.List; | 25 import java.util.List; |
24 | 26 |
25 /** | 27 /** |
26 * Instrumentation tests for the Notification Bridge. | 28 * Instrumentation tests for the Notification Bridge. |
27 * | 29 * |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 } | 75 } |
74 | 76 |
75 assertNotNull(notification.largeIcon); | 77 assertNotNull(notification.largeIcon); |
76 | 78 |
77 // Validate the notification's behavior. | 79 // Validate the notification's behavior. |
78 assertEquals(Notification.DEFAULT_ALL, notification.defaults); | 80 assertEquals(Notification.DEFAULT_ALL, notification.defaults); |
79 assertEquals(Notification.PRIORITY_DEFAULT, notification.priority); | 81 assertEquals(Notification.PRIORITY_DEFAULT, notification.priority); |
80 } | 82 } |
81 | 83 |
82 /** | 84 /** |
83 * Verifies that notifications created with the "silent" flag do not inherit
system defaults | 85 * Verifies that the ONLY_ALERT_ONCE flag is not set when renotify is true. |
84 * in regards to their sound, vibration and light indicators. | |
85 */ | 86 */ |
86 @MediumTest | 87 @MediumTest |
87 @Feature({"Browser", "Notifications"}) | 88 @Feature({"Browser", "Notifications"}) |
88 public void testNotificationRenotifyProperty() throws Exception { | 89 public void testNotificationRenotifyProperty() throws Exception { |
89 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); | 90 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
90 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); | 91 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
91 | 92 |
92 Notification notification = | 93 Notification notification = |
93 showAndGetNotification("MyNotification", "{ tag: 'myTag', renoti
fy: true }"); | 94 showAndGetNotification("MyNotification", "{ tag: 'myTag', renoti
fy: true }"); |
94 | 95 |
95 // Zero indicates that no defaults should be inherited from the system. | |
96 assertEquals(0, notification.flags & Notification.FLAG_ONLY_ALERT_ONCE); | 96 assertEquals(0, notification.flags & Notification.FLAG_ONLY_ALERT_ONCE); |
97 } | 97 } |
98 | 98 |
99 /** | 99 /** |
100 * Verifies that notifications created with the "silent" flag do not inherit
system defaults | 100 * Verifies that notifications created with the "silent" flag do not inherit
system defaults |
101 * in regards to their sound, vibration and light indicators. | 101 * in regards to their sound, vibration and light indicators. |
102 */ | 102 */ |
103 @MediumTest | 103 @MediumTest |
104 @Feature({"Browser", "Notifications"}) | 104 @Feature({"Browser", "Notifications"}) |
105 public void testNotificationSilentProperty() throws Exception { | 105 public void testNotificationSilentProperty() throws Exception { |
106 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); | 106 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
107 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); | 107 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
108 | 108 |
109 Notification notification = showAndGetNotification("MyNotification", "{
silent: true }"); | 109 Notification notification = showAndGetNotification("MyNotification", "{
silent: true }"); |
110 | 110 |
111 // Zero indicates that no defaults should be inherited from the system. | 111 // Zero indicates that no defaults should be inherited from the system. |
112 assertEquals(0, notification.defaults); | 112 assertEquals(0, notification.defaults); |
113 } | 113 } |
114 | 114 |
115 /** | 115 /** |
| 116 * Verifies that when notification vibration is disabled in preferences and
no custom pattern is |
| 117 * specified, no vibration is requested from the framework. |
| 118 */ |
| 119 @MediumTest |
| 120 @Feature({"Browser", "Notifications"}) |
| 121 public void testNotificationVibratePreferenceDisabledDefault() throws Except
ion { |
| 122 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
| 123 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
| 124 |
| 125 // Disable notification vibration in preferences. |
| 126 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 127 @Override |
| 128 public void run() { |
| 129 PrefServiceBridge.getInstance().setNotificationsVibrateEnabled(f
alse); |
| 130 } |
| 131 }); |
| 132 |
| 133 Notification notification = showAndGetNotification("MyNotification", "{}
"); |
| 134 |
| 135 // Vibration should not be in the defaults. |
| 136 assertEquals( |
| 137 Notification.DEFAULT_ALL & ~Notification.DEFAULT_VIBRATE, notifi
cation.defaults); |
| 138 |
| 139 // There should be a custom no-op vibration pattern. |
| 140 assertEquals(1, notification.vibrate.length); |
| 141 assertEquals(0L, notification.vibrate[0]); |
| 142 } |
| 143 |
| 144 /** |
| 145 * Verifies that when notification vibration is disabled in preferences and
a custom pattern is |
| 146 * specified, no vibration is requested from the framework. |
| 147 */ |
| 148 @MediumTest |
| 149 @Feature({"Browser", "Notifications"}) |
| 150 public void testNotificationVibratePreferenceDisabledCustomPattern() throws
Exception { |
| 151 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
| 152 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
| 153 |
| 154 // Disable notification vibration in preferences. |
| 155 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 156 @Override |
| 157 public void run() { |
| 158 PrefServiceBridge.getInstance().setNotificationsVibrateEnabled(f
alse); |
| 159 } |
| 160 }); |
| 161 |
| 162 Notification notification = showAndGetNotification("MyNotification", "{
vibrate: 42}"); |
| 163 |
| 164 // Vibration should not be in the defaults. |
| 165 assertEquals( |
| 166 Notification.DEFAULT_ALL & ~Notification.DEFAULT_VIBRATE, notifi
cation.defaults); |
| 167 |
| 168 // There should be a custom no-op vibration pattern. |
| 169 assertEquals(1, notification.vibrate.length); |
| 170 assertEquals(0L, notification.vibrate[0]); |
| 171 } |
| 172 |
| 173 /** |
| 174 * Verifies that by default the notification vibration preference is enabled
, and a custom |
| 175 * pattern is passed along. |
| 176 */ |
| 177 @MediumTest |
| 178 @Feature({"Browser", "Notifications"}) |
| 179 public void testNotificationVibrateCustomPattern() throws Exception { |
| 180 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
| 181 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
| 182 |
| 183 // By default, vibration is enabled in notifications. |
| 184 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 185 @Override |
| 186 public void run() { |
| 187 assertTrue(PrefServiceBridge.getInstance().isNotificationsVibrat
eEnabled()); |
| 188 } |
| 189 }); |
| 190 |
| 191 Notification notification = showAndGetNotification("MyNotification", "{
vibrate: 42}"); |
| 192 |
| 193 // Vibration should not be in the defaults, a custom pattern was provide
d. |
| 194 assertEquals( |
| 195 Notification.DEFAULT_ALL & ~Notification.DEFAULT_VIBRATE, notifi
cation.defaults); |
| 196 |
| 197 // The custom pattern should have been passed along. |
| 198 assertEquals(2, notification.vibrate.length); |
| 199 assertEquals(0L, notification.vibrate[0]); |
| 200 assertEquals(42L, notification.vibrate[1]); |
| 201 } |
| 202 |
| 203 /** |
116 * Verifies that notifications which specify an icon will have that icon fet
ched, converted into | 204 * Verifies that notifications which specify an icon will have that icon fet
ched, converted into |
117 * a Bitmap and included as the large icon in the notification. | 205 * a Bitmap and included as the large icon in the notification. |
118 */ | 206 */ |
119 @MediumTest | 207 @MediumTest |
120 @Feature({"Browser", "Notifications"}) | 208 @Feature({"Browser", "Notifications"}) |
121 public void testShowNotificationWithIcon() throws Exception { | 209 public void testShowNotificationWithIcon() throws Exception { |
122 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); | 210 loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
123 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); | 211 setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
124 | 212 |
125 Notification notification = showAndGetNotification("MyNotification", "{i
con: 'icon.png'}"); | 213 Notification notification = showAndGetNotification("MyNotification", "{i
con: 'icon.png'}"); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 assertEquals(1, notifications.size()); | 409 assertEquals(1, notifications.size()); |
322 assertEquals("Two", | 410 assertEquals("Two", |
323 notifications.get(0).notification.extras.getString(Notification.
EXTRA_TITLE)); | 411 notifications.get(0).notification.extras.getString(Notification.
EXTRA_TITLE)); |
324 | 412 |
325 // Close the last notification and verify that none remain. | 413 // Close the last notification and verify that none remain. |
326 notifications.get(0).notification.contentIntent.send(); | 414 notifications.get(0).notification.contentIntent.send(); |
327 waitForNotificationManagerMutation(); | 415 waitForNotificationManagerMutation(); |
328 assertTrue(getNotificationEntries().isEmpty()); | 416 assertTrue(getNotificationEntries().isEmpty()); |
329 } | 417 } |
330 } | 418 } |
OLD | NEW |