summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/engine/syncer_thread_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/engine/syncer_thread_unittest.cc')
-rw-r--r--chrome/browser/sync/engine/syncer_thread_unittest.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/chrome/browser/sync/engine/syncer_thread_unittest.cc b/chrome/browser/sync/engine/syncer_thread_unittest.cc
index b2238eb..521b292 100644
--- a/chrome/browser/sync/engine/syncer_thread_unittest.cc
+++ b/chrome/browser/sync/engine/syncer_thread_unittest.cc
@@ -732,6 +732,52 @@ TEST_F(SyncerThreadWithSyncerTest, NudgeWithDataTypes) {
EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.none());
}
+TEST_F(SyncerThreadWithSyncerTest, NudgeWithDataTypesCoalesced) {
+ SyncShareIntercept interceptor;
+ connection()->SetMidCommitObserver(&interceptor);
+ // We don't want a poll to happen during this test (except the first one).
+ PreventThreadFromPolling();
+ EXPECT_TRUE(syncer_thread()->Start());
+ metadb()->Open();
+ syncer_thread()->CreateSyncer(metadb()->name());
+ const TimeDelta poll_interval = TimeDelta::FromMinutes(5);
+ interceptor.WaitForSyncShare(1, poll_interval + poll_interval);
+ EXPECT_EQ(static_cast<unsigned int>(1),
+ interceptor.times_sync_occured().size());
+
+ // The SyncerThread should be waiting for the poll now. Nudge it to sync
+ // immediately (5ms).
+ syncable::ModelTypeBitSet model_types;
+ model_types[syncable::BOOKMARKS] = true;
+
+ // Paused so we can verify the nudge types safely.
+ syncer_thread()->RequestPause();
+ syncer_thread()->NudgeSyncerWithDataTypes(100,
+ SyncerThread::kUnknown,
+ model_types);
+ EXPECT_EQ(model_types, syncer_thread()->vault_.pending_nudge_types_);
+
+ model_types[syncable::BOOKMARKS] = false;
+ model_types[syncable::AUTOFILL] = true;
+ syncer_thread()->NudgeSyncerWithDataTypes(0,
+ SyncerThread::kUnknown,
+ model_types);
+
+ // Reset BOOKMARKS for expectations.
+ model_types[syncable::BOOKMARKS] = true;
+ EXPECT_EQ(model_types, syncer_thread()->vault_.pending_nudge_types_);
+
+ syncer_thread()->RequestResume();
+
+ interceptor.WaitForSyncShare(1, TimeDelta::FromSeconds(1));
+ EXPECT_EQ(static_cast<unsigned int>(2),
+ interceptor.times_sync_occured().size());
+
+ // SyncerThread should be waiting again. Signal it to stop.
+ EXPECT_TRUE(syncer_thread()->Stop(2000));
+ EXPECT_TRUE(syncer_thread()->vault_.pending_nudge_types_.none());
+}
+
TEST_F(SyncerThreadWithSyncerTest, Throttling) {
SyncShareIntercept interceptor;
connection()->SetMidCommitObserver(&interceptor);