Index: chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java |
index 6c52883bb8aa5b053222b20068059b6752dbc99f..e12d0f583b2d34646bd90d41c144018f6ed11a0a 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java |
@@ -27,9 +27,11 @@ import org.chromium.base.test.util.Feature; |
import org.chromium.base.test.util.MinAndroidSdkLevel; |
import org.chromium.base.test.util.RetryOnFailure; |
import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.engagement.SiteEngagementService; |
import org.chromium.chrome.browser.infobar.InfoBar; |
import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
import org.chromium.chrome.browser.preferences.website.ContentSetting; |
+import org.chromium.chrome.browser.profiles.Profile; |
import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.widget.RoundedIconGenerator; |
import org.chromium.chrome.test.util.InfoBarUtil; |
@@ -41,6 +43,8 @@ import org.chromium.content.browser.test.util.CriteriaHelper; |
import java.net.URL; |
import java.util.List; |
+import java.util.concurrent.Callable; |
+import java.util.concurrent.ExecutionException; |
import java.util.concurrent.TimeoutException; |
/** |
@@ -56,6 +60,7 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
@Override |
protected void setUp() throws Exception { |
super.setUp(); |
+ SiteEngagementService.setParamValuesForTesting(); |
loadUrl(getTestServer().getURL(NOTIFICATION_TEST_PAGE)); |
} |
@@ -99,6 +104,21 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
assertTrue(getNotificationEntries().isEmpty()); |
} |
+ private double getEngagementScoreBlocking() { |
+ try { |
+ return ThreadUtils.runOnUiThreadBlocking(new Callable<Double>() { |
+ @Override |
+ public Double call() throws Exception { |
+ return SiteEngagementService.getForProfile(Profile.getLastUsedProfile()) |
+ .getScore(getOrigin()); |
+ } |
+ }); |
+ } catch (ExecutionException ex) { |
+ assert false : "Unexpected ExecutionException"; |
+ } |
+ return 0.0; |
+ } |
+ |
/** |
* Verifies that notifcations cannot be shown without permission, and that dismissing or denying |
* the infobar works correctly. |
@@ -263,7 +283,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
/** |
* Verifies that setting a reply on the remote input of a notification action with type 'text' |
* and triggering the action's intent causes the same reply to be received in the subsequent |
- * notificationclick event on the service worker. |
+ * notificationclick event on the service worker. Verifies that site engagement is incremented |
+ * appropriately. |
*/ |
@CommandLineFlags.Add("enable-experimental-web-platform-features") |
@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT_WATCH) |
@@ -274,6 +295,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
Context context = getInstrumentation().getTargetContext(); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
Notification notification = showAndGetNotification("MyNotification", "{ " |
+ " actions: [{action: 'myAction', title: 'reply', type: 'text'}]," |
+ " data: 'ACTION_REPLY'}"); |
@@ -289,13 +312,16 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
remoteInputs[0].getResultKey(), "My Reply" /* reply */); |
// Check reply was received by the service worker (see android_test_worker.js). |
+ // Expect +1 engagement from interacting with the notification. |
waitForTitle("reply: My Reply"); |
+ assertEquals(6.5, getEngagementScoreBlocking()); |
} |
/** |
* Verifies that setting an empty reply on the remote input of a notification action with type |
* 'text' and triggering the action's intent causes an empty reply string to be received in the |
- * subsequent notificationclick event on the service worker. |
+ * subsequent notificationclick event on the service worker. Verifies that site engagement is |
+ * incremented appropriately. |
*/ |
@CommandLineFlags.Add("enable-experimental-web-platform-features") |
@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT_WATCH) |
@@ -306,6 +332,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
Context context = getInstrumentation().getTargetContext(); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
Notification notification = showAndGetNotification("MyNotification", "{ " |
+ " actions: [{action: 'myAction', title: 'reply', type: 'text'}]," |
+ " data: 'ACTION_REPLY'}"); |
@@ -321,7 +349,9 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
remoteInputs[0].getResultKey(), "" /* reply */); |
// Check empty reply was received by the service worker (see android_test_worker.js). |
+ // Expect +1 engagement from interacting with the notification. |
waitForTitle("reply:"); |
+ assertEquals(6.5, getEngagementScoreBlocking()); |
} |
@TargetApi(Build.VERSION_CODES.KITKAT_WATCH) // RemoteInputs added in KITKAT_WATCH. |
@@ -340,7 +370,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
/** |
* Verifies that *not* setting a reply on the remote input of a notification action with type |
* 'text' and triggering the action's intent causes a null reply to be received in the |
- * subsequent notificationclick event on the service worker. |
+ * subsequent notificationclick event on the service worker. Verifies that site engagement is |
+ * incremented appropriately. |
*/ |
@TargetApi(Build.VERSION_CODES.KITKAT) // Notification.Action.actionIntent added in Android K. |
@CommandLineFlags.Add("enable-experimental-web-platform-features") |
@@ -349,6 +380,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
public void testReplyToNotificationWithNoRemoteInput() throws Exception { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
Notification notification = showAndGetNotification("MyNotification", "{ " |
+ " actions: [{action: 'myAction', title: 'reply', type: 'text'}]," |
+ " data: 'ACTION_REPLY'}"); |
@@ -357,7 +390,9 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
notification.actions[0].actionIntent.send(); |
// Check reply was received by the service worker (see android_test_worker.js). |
+ // Expect +1 engagement from interacting with the notification. |
waitForTitle("reply: null"); |
+ assertEquals(6.5, getEngagementScoreBlocking()); |
} |
/** |
@@ -579,6 +614,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
@RetryOnFailure |
public void testNotificationContentIntentClosesNotification() throws Exception { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
Notification notification = showAndGetNotification("MyNotification", "{}"); |
@@ -588,8 +625,10 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
// The Service Worker will close the notification upon receiving the notificationclick |
// event. This will eventually bubble up to a call to cancel() in the NotificationManager. |
+ // Expect +1 engagement from interacting with the notification. |
waitForNotificationManagerMutation(); |
assertTrue(getNotificationEntries().isEmpty()); |
+ assertEquals(6.5, getEngagementScoreBlocking()); |
} |
/** |
@@ -635,6 +674,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
@Feature({"Browser", "Notifications"}) |
public void testNotificationTagReplacement() throws Exception { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
runJavaScriptCodeInCurrentTab("showNotification('MyNotification', {tag: 'myTag'});"); |
waitForNotificationManagerMutation(); |
@@ -657,6 +698,9 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
// Verify that as always, the same integer is used, also for replaced notifications. |
assertEquals(id, notifications.get(0).id); |
assertEquals(NotificationPlatformBridge.PLATFORM_ID, notifications.get(0).id); |
+ |
+ // Engagement should not have changed since we didn't interact. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
} |
/** |
@@ -667,6 +711,8 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
@Feature({"Browser", "Notifications"}) |
public void testShowAndCloseMultipleNotifications() throws Exception { |
setNotificationContentSettingForCurrentOrigin(ContentSetting.ALLOW); |
+ // +5 engagement from notification permission and +0.5 from navigating to the test page. |
+ assertEquals(5.5, getEngagementScoreBlocking()); |
// Open the first notification and verify it is displayed. |
runJavaScriptCodeInCurrentTab("showNotification('One');"); |
@@ -707,9 +753,15 @@ public class NotificationPlatformBridgeTest extends NotificationTestBase { |
assertEquals(1, notifications.size()); |
assertEquals("Two", NotificationTestUtil.getExtraTitle(notifications.get(0).notification)); |
+ // Expect +1 engagement from interacting with the notification. |
+ assertEquals(6.5, getEngagementScoreBlocking()); |
+ |
// Close the last notification and verify that none remain. |
notifications.get(0).notification.contentIntent.send(); |
waitForNotificationManagerMutation(); |
assertTrue(getNotificationEntries().isEmpty()); |
+ |
+ // Expect +1 engagement from interacting with the notification. |
+ assertEquals(7.5, getEngagementScoreBlocking()); |
} |
} |