From fc434f136b1d6d16a525d70be12c235c769fd8e7 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Thu, 7 May 2020 08:52:56 -0700 Subject: [PATCH] fix: multiple extension filters on macOS (#23409) --- shell/browser/ui/file_dialog_mac.mm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shell/browser/ui/file_dialog_mac.mm b/shell/browser/ui/file_dialog_mac.mm index 1ac4394de477..73d12d5ab595 100644 --- a/shell/browser/ui/file_dialog_mac.mm +++ b/shell/browser/ui/file_dialog_mac.mm @@ -92,7 +92,16 @@ void SetAllowedFileTypes(NSSavePanel* dialog, const Filters& filters) { for (const Filter& filter : filters) { NSMutableSet* file_type_set = [NSMutableSet set]; [filter_names addObject:@(filter.first.c_str())]; - for (const std::string& ext : filter.second) { + for (std::string ext : filter.second) { + // macOS is incapable of understanding multiple file extensions, + // so we need to tokenize the extension that's been passed in. + // We want to err on the side of allowing files, so we pass + // along only the final extension ('tar.gz' => 'gz'). + auto pos = ext.rfind('.'); + if (pos != std::string::npos) { + ext.erase(0, pos + 1); + } + [file_type_set addObject:@(ext.c_str())]; } [file_types_list addObject:[file_type_set allObjects]];