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 b44a88c037838c32eeed855521c44e49d970d923..0bc81f4fced69a347179993e1516e5cdec21777f 100644 |
--- a/chrome/browser/sync/engine/sync_scheduler_unittest.cc |
+++ b/chrome/browser/sync/engine/sync_scheduler_unittest.cc |
@@ -476,6 +476,42 @@ 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::ModelTypeSet types1(syncable::BOOKMARKS), |
+ types2(syncable::AUTOFILL), types3; |
+ |
+ // Create a huge time delay. |
+ TimeDelta delay = TimeDelta::FromDays(1); |
+ |
+ 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(CompareModelTypeSetToModelTypePayloadMap( |
+ Union(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); |