drive: Process remove tasks as a SyncClient::SyncTask

In favor of consistency

BUG=None
TEST=unit_tests

Review URL: https://codereview.chromium.org/91063002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237566 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chromeos/drive/sync_client.cc b/chrome/browser/chromeos/drive/sync_client.cc
index 46157c8..e955454 100644
--- a/chrome/browser/chromeos/drive/sync_client.cc
+++ b/chrome/browser/chromeos/drive/sync_client.cc
@@ -220,12 +220,7 @@
 
 void SyncClient::AddRemoveTask(const std::string& local_id) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  DVLOG(1) << "Removing " << local_id;
-  remove_performer_->Remove(local_id,
-                            base::Bind(&SyncClient::OnRemoveComplete,
-                                       weak_ptr_factory_.GetWeakPtr(),
-                                       local_id));
+  AddRemoveTaskInternal(local_id, base::TimeDelta::FromSeconds(0));
 }
 
 void SyncClient::AddFetchTaskInternal(const std::string& local_id,
@@ -266,6 +261,19 @@
   AddTask(SyncTasks::key_type(UPLOAD, local_id), task, delay);
 }
 
+void SyncClient::AddRemoveTaskInternal(const std::string& local_id,
+                                       const base::TimeDelta& delay) {
+  SyncTask task;
+  task.task = base::Bind(
+      &RemovePerformer::Remove,
+      base::Unretained(remove_performer_.get()),
+      local_id,
+      base::Bind(&SyncClient::OnRemoveComplete,
+                 weak_ptr_factory_.GetWeakPtr(),
+                 local_id));
+  AddTask(SyncTasks::key_type(REMOVE, local_id), task, delay);
+}
+
 void SyncClient::AddTask(const SyncTasks::key_type& key,
                          const SyncTask& task,
                          const base::TimeDelta& delay) {
@@ -402,22 +410,19 @@
                                   FileError error) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
+  tasks_.erase(SyncTasks::key_type(REMOVE, local_id));
+
   if (error == FILE_ERROR_OK) {
     DVLOG(1) << "Removed " << local_id;
   } else {
     switch (error) {
       case FILE_ERROR_NO_CONNECTION:
         // Add the task again so that we'll retry once the connection is back.
-        AddRemoveTask(local_id);
+        AddRemoveTaskInternal(local_id, base::TimeDelta::FromSeconds(0));
         break;
       case FILE_ERROR_SERVICE_UNAVAILABLE:
         // Add the task again so that we'll retry once the service is back.
-        base::MessageLoopProxy::current()->PostDelayedTask(
-            FROM_HERE,
-            base::Bind(&SyncClient::AddRemoveTask,
-                       weak_ptr_factory_.GetWeakPtr(),
-                       local_id),
-            long_delay_);
+        AddRemoveTaskInternal(local_id, long_delay_);
         break;
       default:
         LOG(WARNING) << "Failed to remove " << local_id << ": "