Index: chrome/browser/sync/engine/sync_scheduler_unittest.cc |
diff --git a/chrome/browser/sync/engine/sync_scheduler_unittest.cc b/chrome/browser/sync/engine/sync_scheduler_unittest.cc |
index b83322dacb65da921ed7339a88347b682c8010c3..095f822f2016a492b90f480b03e89b016d1b9d16 100644 |
--- a/chrome/browser/sync/engine/sync_scheduler_unittest.cc |
+++ b/chrome/browser/sync/engine/sync_scheduler_unittest.cc |
@@ -480,6 +480,43 @@ TEST_F(SyncSchedulerTest, NudgeCoalescing) { |
r2.snapshots[0]->source.updates_source); |
} |
+// Test that nudges are coalesced. |
+TEST_F(SyncSchedulerTest, NudgeCoalescingWithDifferentTimings) { |
+ StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
+ RunLoop(); |
+ |
+ SyncShareRecords r; |
+ EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
+ WithArg<0>(RecordSyncShare(&r)))); |
+ syncable::ModelTypeBitSet types1, types2, types3; |
+ types1[syncable::BOOKMARKS] = true; |
+ types2[syncable::AUTOFILL] = true; |
+ |
+ // Create a huge time delay. |
+ TimeDelta delay = TimeDelta::FromSeconds(1200); |
+ |
+ scheduler()->ScheduleNudge( |
+ delay, NUDGE_SOURCE_UNKNOWN, types1, FROM_HERE); |
+ |
+ scheduler()->ScheduleNudge( |
+ zero(), NUDGE_SOURCE_UNKNOWN, types2, FROM_HERE); |
+ |
+ TimeTicks min_time = TimeTicks::Now(); |
+ TimeTicks max_time = TimeTicks::Now() + delay; |
+ |
+ RunLoop(); |
+ |
+ // Make sure the sync has happened. |
+ ASSERT_EQ(1U, r.snapshots.size()); |
+ EXPECT_TRUE(CompareModelTypeBitSetToModelTypePayloadMap( |
+ types1 | types2, r.snapshots[0]->source.types)); |
+ |
+ // Make sure the sync happened at the right time. |
+ EXPECT_GE(r.times[0], min_time); |
+ EXPECT_LE(r.times[0], max_time); |
+} |
+ |
// Test nudge scheduling. |
TEST_F(SyncSchedulerTest, NudgeWithPayloads) { |
StartSyncScheduler(SyncScheduler::NORMAL_MODE); |