M96: FSA: Strip % chars from suggestedName
not be allowed in a suggestedName.
(cherry picked from commit 62e6c0b73c202565da5438add6057fedfa3546ef)
net: :GenerateFileName() does not strip these characters, but they should
Change-Id: I90e413bac1cd66c7ac3b2bff8f8f3a2f71a243b4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3324687
Reviewed-by: Victor Costan <pwnall@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#950335}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3335097
Auto-Submit: Austin Sullivan <asully@chromium.org>
Reviewed-by: Adrian Taylor <adetaylor@chromium.org>
Commit-Queue: Austin Sullivan <asully@chromium.org>
Cr-Commit-Position: refs/branch-heads/4664@{#1297}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}
diff --git a/content/browser/file_system_access/file_system_access_manager_impl.cc b/content/browser/file_system_access/file_system_access_manager_impl.cc
index b03b7c1..adfcbab 100644
--- a/content/browser/file_system_access/file_system_access_manager_impl.cc
+++ b/content/browser/file_system_access/file_system_access_manager_impl.cc
@@ -509,11 +509,14 @@
? options->get_save_file_picker_options()->suggested_name
: std::string();
- auto suggested_name_path =
- !suggested_name.empty()
- ? net::GenerateFileName(GURL(), std::string(), std::string(),
- suggested_name, std::string(), std::string())
- : base::FilePath();
+ base::FilePath suggested_name_path;
+ if (!suggested_name.empty()) {
+ // `net::GenerateFileName` does not strip "%" characters.
+ base::ReplaceChars(suggested_name, "%", "_", &suggested_name);
+ suggested_name_path =
+ net::GenerateFileName(GURL(), std::string(), std::string(),
+ suggested_name, std::string(), std::string());
+ }
FileSystemChooser::Options file_system_chooser_options(
GetSelectFileDialogType(options), GetAndMoveAcceptsTypesInfo(options),
diff --git a/content/browser/file_system_access/file_system_chooser_browsertest.cc b/content/browser/file_system_access/file_system_chooser_browsertest.cc
index 7cf8a088..b5bebd0 100644
--- a/content/browser/file_system_access/file_system_chooser_browsertest.cc
+++ b/content/browser/file_system_access/file_system_chooser_browsertest.cc
@@ -1573,9 +1573,9 @@
"dangerous_extension.lnk", false});
#endif
// Invalid characters should be sanitized.
- name_infos.push_back({R"(inv*l:d\\charבאמת!a<ters🤓.txt)",
+ name_infos.push_back({R"(inv*l:d\\ch%rבאמת!a<ters🤓.txt)",
ListValueOf(".txt"), true,
- R"(inv_l_d__charבאמת!a_ters🤓.txt)", true});
+ R"(inv_l_d__ch_rבאמת!a_ters🤓.txt)", true});
for (const auto& name_info : name_infos) {
SCOPED_TRACE(name_info.suggested_name);