Index: chrome/browser/sync_file_system/sync_task_manager_unittest.cc |
diff --git a/chrome/browser/sync_file_system/sync_task_manager_unittest.cc b/chrome/browser/sync_file_system/sync_task_manager_unittest.cc |
index 708da02a5f9ffe3e63422317d03cac898143ca94..95bafd10f473a00bb09a58f419eaf660e9f5245a 100644 |
--- a/chrome/browser/sync_file_system/sync_task_manager_unittest.cc |
+++ b/chrome/browser/sync_file_system/sync_task_manager_unittest.cc |
@@ -20,6 +20,15 @@ void IncrementAndAssign(int* counter, |
*status_out = status; |
} |
+template <typename T> |
+void IncrementAndAssignWithOwnedPointer(T* object, |
+ int* counter, |
+ SyncStatusCode* status_out, |
+ SyncStatusCode status) { |
+ ++(*counter); |
+ *status_out = status; |
+} |
+ |
class TaskManagerClient |
: public SyncTaskManager::Client, |
public base::SupportsWeakPtr<TaskManagerClient> { |
@@ -235,4 +244,31 @@ TEST(SyncTaskManagerTest, ScheduleAndCancelSyncTask) { |
EXPECT_FALSE(task_completed); |
} |
+TEST(SyncTaskManagerTest, ScheduleAndCancelTask) { |
+ base::MessageLoop message_loop; |
+ |
+ int callback_count = 0; |
+ SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
+ |
+ bool task_started = false; |
+ bool task_completed = false; |
+ |
+ { |
+ SyncTaskManager task_manager((base::WeakPtr<SyncTaskManager::Client>())); |
+ task_manager.Initialize(SYNC_STATUS_OK); |
+ MultihopSyncTask* task = new MultihopSyncTask( |
+ &task_started, &task_completed); |
+ task_manager.ScheduleTask( |
+ base::Bind(&MultihopSyncTask::Run, base::Unretained(task)), |
+ base::Bind(&IncrementAndAssignWithOwnedPointer<MultihopSyncTask>, |
+ base::Owned(task), &callback_count, &status)); |
+ } |
+ |
+ message_loop.RunUntilIdle(); |
+ EXPECT_EQ(0, callback_count); |
+ EXPECT_EQ(SYNC_STATUS_UNKNOWN, status); |
+ EXPECT_TRUE(task_started); |
+ EXPECT_FALSE(task_completed); |
+} |
+ |
} // namespace sync_file_system |