GTTF: Clean up DownloadFileManager

This removes a lot of duplication, locking, and thread jumping.

Most of the operations run on the FILE thread, and we do not duplicate
so much information. Each DownloadFile keeps track of its DownloadManager
(each Profile has its own DownloadManager). This allows us to remove
many maps from DownloadFileManager that were duplicating that information.

There is still SaveFileManager, but hopefully I will be able
to merge those two in small steps.

TEST=unit_tests, browser_tests, ui_tests
BUG=48913

Review URL: http://codereview.chromium.org/3245005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58196 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc
index d1ec883..266767b 100644
--- a/chrome/browser/download/download_manager.cc
+++ b/chrome/browser/download/download_manager.cc
@@ -73,9 +73,12 @@
 void DownloadManager::Shutdown() {
   DCHECK(shutdown_needed_) << "Shutdown called when not needed.";
 
-  // Stop receiving download updates
-  if (file_manager_)
-    file_manager_->RemoveDownloadManager(this);
+  if (file_manager_) {
+    ChromeThread::PostTask(ChromeThread::FILE, FROM_HERE,
+        NewRunnableMethod(file_manager_,
+                          &DownloadFileManager::OnDownloadManagerShutdown,
+                          this));
+  }
 
   // 'in_progress_' may contain DownloadItems that have not finished the start
   // complete (from the history service) and thus aren't in downloads_.
@@ -661,8 +664,6 @@
                           render_process_id,
                           request_id));
 
-  // Tell the file manager to cancel the download.
-  file_manager_->RemoveDownload(download_id, this);  // On the UI thread
   ChromeThread::PostTask(
       ChromeThread::FILE, FROM_HERE,
       NewRunnableMethod(