Fix an issue dangerous dialog is not shown for some apk download
On Android Q+, download will create a different intermediate content
Uri after target determination. However, creating the content Uri
might cause the file name to change, as Android tries to correct the
file name using MIME type. And the new file name may be of a dangerous
type.
However, the dangerous file check happens in target determination. So
creating the intermediate content Uri later allows such file names to
bypass dangerous file check.
This CL fixes the issue by moving content URI creation into target
determination stage, right before dangerous download check. And this
will also simplify the logic in DownloadItemImpl as it now gets the
target content Uri instead of an unused file path after target
determination.
BUG=1301180
Change-Id: Ie4561e8d0b4b3a87ec7a041f3ac71f23866fce04
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3508375
Reviewed-by: Xing Liu <[email protected]>
Reviewed-by: Alex Moshchuk <[email protected]>
Reviewed-by: Junbo Ke <[email protected]>
Reviewed-by: Clark DuVall <[email protected]>
Reviewed-by: Tommy Nyquist <[email protected]>
Commit-Queue: Min Qin <[email protected]>
Cr-Commit-Position: refs/heads/main@{#982422}
diff --git a/content/shell/browser/shell_download_manager_delegate.cc b/content/shell/browser/shell_download_manager_delegate.cc
index 2856779..25f8bb3 100644
--- a/content/shell/browser/shell_download_manager_delegate.cc
+++ b/content/shell/browser/shell_download_manager_delegate.cc
@@ -79,7 +79,8 @@
download::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
download::DownloadItem::MixedContentStatus::UNKNOWN,
- download->GetForcedFilePath(), absl::nullopt /*download_schedule*/,
+ download->GetForcedFilePath(), base::FilePath(),
+ absl::nullopt /*download_schedule*/,
download::DOWNLOAD_INTERRUPT_REASON_NONE);
return true;
}
@@ -146,7 +147,7 @@
download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
download::DownloadItem::MixedContentStatus::UNKNOWN,
suggested_path.AddExtension(FILE_PATH_LITERAL(".crdownload")),
- absl::nullopt /*download_schedule*/,
+ base::FilePath(), absl::nullopt /*download_schedule*/,
download::DOWNLOAD_INTERRUPT_REASON_NONE);
return;
}
@@ -194,12 +195,12 @@
NOTIMPLEMENTED();
#endif
- std::move(callback).Run(result,
- download::DownloadItem::TARGET_DISPOSITION_PROMPT,
- download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
- download::DownloadItem::MixedContentStatus::UNKNOWN,
- result, absl::nullopt /*download_schedule*/,
- download::DOWNLOAD_INTERRUPT_REASON_NONE);
+ std::move(callback).Run(
+ result, download::DownloadItem::TARGET_DISPOSITION_PROMPT,
+ download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
+ download::DownloadItem::MixedContentStatus::UNKNOWN, result,
+ base::FilePath(), absl::nullopt /*download_schedule*/,
+ download::DOWNLOAD_INTERRUPT_REASON_NONE);
}
void ShellDownloadManagerDelegate::SetDownloadBehaviorForTesting(