Index: chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java |
index 4fccac7c3a68026b12c080cc4d01ddf0b8e2abbe..59551b843ea1e2277e198525e8c58ed381bb951c 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsControllerTest.java |
@@ -189,4 +189,70 @@ public class DelayedInvalidationsControllerTest { |
Assert.assertEquals(1, mController.mBundles.size()); |
Assert.assertEquals(allInvalidations, new PendingInvalidation(mController.mBundles.get(0))); |
} |
+ |
+ @Test |
+ @SmallTest |
+ @Feature({"Sync", "Invalidation"}) |
+ @UiThreadTest |
+ public void testSameObjectInvalidationsGetCombined() throws InterruptedException { |
+ // First make sure there are no pending invalidations. |
+ mController.clearPendingInvalidations(mContext); |
+ Assert.assertFalse(mController.notifyPendingInvalidations(mContext)); |
+ Assert.assertFalse(mController.mInvalidated); |
+ |
+ // Create invalidations with the same id/src, but different versions and payloads. |
+ PendingInvalidation lowerVersionInv = |
+ new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION, PAYLOAD); |
+ PendingInvalidation higherVersionInv = |
+ new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION_2, PAYLOAD_2); |
+ |
+ // Can't invalidate while Chrome is in the background. |
+ setApplicationState(ActivityState.STOPPED); |
+ Assert.assertFalse(mController.shouldNotifyInvalidation(new Bundle())); |
+ |
+ // Add multiple pending invalidations. |
+ mController.addPendingInvalidation(mContext, TEST_ACCOUNT, lowerVersionInv); |
+ mController.addPendingInvalidation(mContext, TEST_ACCOUNT, higherVersionInv); |
+ |
+ // Make sure there are pending invalidations. |
+ Assert.assertTrue(mController.notifyPendingInvalidations(mContext)); |
+ Assert.assertTrue(mController.mInvalidated); |
+ |
+ // As Invalidation for all ids has been received, it will supersede all other invalidations. |
+ Assert.assertEquals(1, mController.mBundles.size()); |
+ Assert.assertEquals(higherVersionInv, new PendingInvalidation(mController.mBundles.get(0))); |
+ } |
+ |
+ @Test |
+ @SmallTest |
+ @Feature({"Sync", "Invalidation"}) |
+ @UiThreadTest |
+ public void testSameObjectLowerVersionInvalidationGetsDiscarded() throws InterruptedException { |
+ // First make sure there are no pending invalidations. |
+ mController.clearPendingInvalidations(mContext); |
+ Assert.assertFalse(mController.notifyPendingInvalidations(mContext)); |
+ Assert.assertFalse(mController.mInvalidated); |
+ |
+ // Create invalidations with the same id/src, but different versions and payloads. |
+ PendingInvalidation lowerVersionInv = |
+ new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION, PAYLOAD); |
+ PendingInvalidation higherVersionInv = |
+ new PendingInvalidation(OBJECT_ID, OBJECT_SRC, VERSION_2, PAYLOAD_2); |
+ |
+ // Can't invalidate while Chrome is in the background. |
+ setApplicationState(ActivityState.STOPPED); |
+ Assert.assertFalse(mController.shouldNotifyInvalidation(new Bundle())); |
+ |
+ // Add multiple pending invalidations. |
+ mController.addPendingInvalidation(mContext, TEST_ACCOUNT, higherVersionInv); |
+ mController.addPendingInvalidation(mContext, TEST_ACCOUNT, lowerVersionInv); |
+ |
+ // Make sure there are pending invalidations. |
+ Assert.assertTrue(mController.notifyPendingInvalidations(mContext)); |
+ Assert.assertTrue(mController.mInvalidated); |
+ |
+ // As Invalidation for all ids has been received, it will supersede all other invalidations. |
+ Assert.assertEquals(1, mController.mBundles.size()); |
+ Assert.assertEquals(higherVersionInv, new PendingInvalidation(mController.mBundles.get(0))); |
+ } |
} |