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 << ": "