Move DownloadTargetInfo into components/download

This moves DownloadTargetInfo into components/download and adjusts the
callback for DownloadItemImplDelegate::DetermineDownloadTarget() to
use it. This opens the door to add more items to DownloadTargetInfo
without having to to a ton of plumbing.

Bug: 1510399
Change-Id: I3946c68a9826f6f8f272e53536a8ee21f193aab8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5213708
Owners-Override: Avi Drissman <[email protected]>
Reviewed-by: Min Qin <[email protected]>
Commit-Queue: Avi Drissman <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1249598}
diff --git a/content/shell/browser/shell_download_manager_delegate.cc b/content/shell/browser/shell_download_manager_delegate.cc
index 5ef6ff7..0f3f9597 100644
--- a/content/shell/browser/shell_download_manager_delegate.cc
+++ b/content/shell/browser/shell_download_manager_delegate.cc
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "build/build_config.h"
+#include "components/download/public/common/download_target_info.h"
 
 #if BUILDFLAG(IS_WIN)
 #include <windows.h>
@@ -63,7 +64,7 @@
 
 bool ShellDownloadManagerDelegate::DetermineDownloadTarget(
     download::DownloadItem* download,
-    DownloadTargetCallback* callback) {
+    download::DownloadTargetCallback* callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   // This assignment needs to be here because even at the call to
   // SetDownloadManager, the system is not fully initialized.
@@ -73,13 +74,11 @@
   }
 
   if (!download->GetForcedFilePath().empty()) {
-    std::move(*callback).Run(
-        download->GetForcedFilePath(),
-        download::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
-        download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
-        download::DownloadItem::InsecureDownloadStatus::UNKNOWN,
-        download->GetForcedFilePath(), base::FilePath(),
-        std::string() /*mime_type*/, download::DOWNLOAD_INTERRUPT_REASON_NONE);
+    download::DownloadTargetInfo target_info;
+    target_info.target_path = download->GetForcedFilePath();
+    target_info.intermediate_path = download->GetForcedFilePath();
+
+    std::move(*callback).Run(std::move(target_info));
     return true;
   }
 
@@ -135,18 +134,17 @@
 
 void ShellDownloadManagerDelegate::OnDownloadPathGenerated(
     uint32_t download_id,
-    DownloadTargetCallback callback,
+    download::DownloadTargetCallback callback,
     const base::FilePath& suggested_path) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (suppress_prompting_) {
     // Testing exit.
-    std::move(callback).Run(
-        suggested_path, download::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
-        download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
-        download::DownloadItem::InsecureDownloadStatus::UNKNOWN,
-        suggested_path.AddExtension(FILE_PATH_LITERAL(".crdownload")),
-        base::FilePath(), std::string() /*mime_type*/,
-        download::DOWNLOAD_INTERRUPT_REASON_NONE);
+    download::DownloadTargetInfo target_info;
+    target_info.target_path = suggested_path;
+    target_info.intermediate_path =
+        suggested_path.AddExtension(FILE_PATH_LITERAL(".crdownload"));
+
+    std::move(callback).Run(std::move(target_info));
     return;
   }
 
@@ -155,7 +153,7 @@
 
 void ShellDownloadManagerDelegate::ChooseDownloadPath(
     uint32_t download_id,
-    DownloadTargetCallback callback,
+    download::DownloadTargetCallback callback,
     const base::FilePath& suggested_path) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   download::DownloadItem* item = download_manager_->GetDownload(download_id);
@@ -193,12 +191,13 @@
   NOTIMPLEMENTED();
 #endif
 
-  std::move(callback).Run(
-      result, download::DownloadItem::TARGET_DISPOSITION_PROMPT,
-      download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
-      download::DownloadItem::InsecureDownloadStatus::UNKNOWN, result,
-      base::FilePath(), std::string() /*mime_type*/,
-      download::DOWNLOAD_INTERRUPT_REASON_NONE);
+  download::DownloadTargetInfo target_info;
+  target_info.target_path = result;
+  target_info.intermediate_path = result;
+  target_info.target_disposition =
+      download::DownloadItem::TARGET_DISPOSITION_PROMPT;
+
+  std::move(callback).Run(std::move(target_info));
 }
 
 void ShellDownloadManagerDelegate::SetDownloadBehaviorForTesting(