drive: Return cancel closure from FileSystem::GetFileContent

This change does not fix the bug, just a preparation for the actual fix.
No behavior change is intended.

Return cancel closure from DownloadOperation and FileSystem.
Change user code (SyncClient and DriveFileStreamReader) to use the returned closure.

BUG=344789
TEST=unit_tests

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260184 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chromeos/drive/sync_client.cc b/chrome/browser/chromeos/drive/sync_client.cc
index 489769c5..f76b3b2 100644
--- a/chrome/browser/chromeos/drive/sync_client.cc
+++ b/chrome/browser/chromeos/drive/sync_client.cc
@@ -127,6 +127,12 @@
   DCHECK(!it->HasError());
 }
 
+// Runs the task and returns a dummy cancel closure.
+base::Closure RunTaskAndReturnDummyCancelClosure(const base::Closure& task) {
+  task.Run();
+  return base::Closure();
+}
+
 }  // namespace
 
 SyncClient::SyncTask::SyncTask() : state(PENDING), should_run_again(false) {}
@@ -235,8 +241,7 @@
       base::Unretained(download_operation_.get()),
       local_id,
       ClientContext(BACKGROUND),
-      base::Bind(&SyncClient::OnGetFileContentInitialized,
-                 weak_ptr_factory_.GetWeakPtr()),
+      GetFileContentInitializedCallback(),
       google_apis::GetContentCallback(),
       base::Bind(&SyncClient::OnFetchFileComplete,
                  weak_ptr_factory_.GetWeakPtr(),
@@ -249,13 +254,14 @@
                                        const base::TimeDelta& delay) {
   SyncTask task;
   task.task = base::Bind(
-      &EntryUpdatePerformer::UpdateEntry,
-      base::Unretained(entry_update_performer_.get()),
-      local_id,
-      context,
-      base::Bind(&SyncClient::OnUpdateComplete,
-                 weak_ptr_factory_.GetWeakPtr(),
-                 local_id));
+      &RunTaskAndReturnDummyCancelClosure,
+      base::Bind(&EntryUpdatePerformer::UpdateEntry,
+                 base::Unretained(entry_update_performer_.get()),
+                 local_id,
+                 context,
+                 base::Bind(&SyncClient::OnUpdateComplete,
+                            weak_ptr_factory_.GetWeakPtr(),
+                            local_id)));
   AddTask(SyncTasks::key_type(UPDATE, local_id), task, delay);
 }
 
@@ -296,7 +302,7 @@
   switch (task->state) {
     case PENDING:
       task->state = RUNNING;
-      task->task.Run();
+      task->cancel_closure = task->task.Run();
       break;
     case RUNNING:  // Do nothing.
       break;
@@ -330,23 +336,6 @@
     AddFetchTask((*local_ids)[i]);
 }
 
-void SyncClient::OnGetFileContentInitialized(
-    FileError error,
-    scoped_ptr<ResourceEntry> entry,
-    const base::FilePath& local_cache_file_path,
-    const base::Closure& cancel_download_closure) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  if (error != FILE_ERROR_OK)
-    return;
-
-  const SyncTasks::key_type key(FETCH, entry->local_id());
-  SyncTasks::iterator it = tasks_.find(key);
-  DCHECK(it != tasks_.end());
-
-  it->second.cancel_closure = cancel_download_closure;
-}
-
 bool SyncClient::OnTaskComplete(SyncType type, const std::string& local_id) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));