Chromium Code Reviews| Index: chrome/browser/ui/views/select_file_dialog_win.cc |
| =================================================================== |
| --- chrome/browser/ui/views/select_file_dialog_win.cc (revision 124466) |
| +++ chrome/browser/ui/views/select_file_dialog_win.cc (working copy) |
| @@ -29,6 +29,19 @@ |
| using content::BrowserThread; |
| +namespace { |
| + |
| +// Given |extension|, if it's not empty, then remove the leading dot. |
| +std::wstring GetExtensionWithoutLeadingDot(const std::wstring& extension) { |
| + size_t len = extension.length(); |
|
Peter Kasting
2012/03/02 18:11:58
Nit: Simpler:
DCHECK(extension.empty() || exten
Lei Zhang
2012/03/02 22:54:32
Done.
|
| + if (!len) |
| + return extension; |
| + DCHECK_EQ(L'.', extension[0]); |
| + return extension.substr(1, len - 1); |
| +} |
| + |
| +} // namespace |
| + |
| // This function takes the output of a SaveAs dialog: a filename, a filter and |
| // the extension originally suggested to the user (shown in the dialog box) and |
| // returns back the filename with the appropriate extension tacked on. If the |
| @@ -50,8 +63,10 @@ |
| // Careful: Checking net::GetMimeTypeFromExtension() will only find |
| // extensions with a known MIME type, which many "known" extensions on Windows |
| // don't have. So we check directly for the "known extension" registry key. |
| - std::wstring file_extension(file_util::GetFileExtensionFromPath(filename)); |
| - std::wstring key(L"." + file_extension); |
| + std::wstring key(FilePath(filename).Extension()); |
| + if (key.empty()) |
|
Peter Kasting
2012/03/02 18:11:58
Nit: This can be omitted, GetExtensionWithoutLeadi
Lei Zhang
2012/03/02 22:54:32
Done.
|
| + key = L"."; |
| + std::wstring file_extension(GetExtensionWithoutLeadingDot(key)); |
| if (!(filter_selected.empty() || filter_selected == L"*.*") && |
| !base::win::RegKey(HKEY_CLASSES_ROOT, key.c_str(), KEY_READ).Valid() && |
| file_extension != suggested_ext) { |
| @@ -244,7 +259,8 @@ |
| // Having an empty filter makes for a bad user experience. We should always |
| // specify a filter when saving. |
| DCHECK(!filter.empty()); |
| - std::wstring file_part = FilePath(suggested_name).BaseName().value(); |
| + const FilePath suggested_path(suggested_name); |
| + std::wstring file_part = suggested_path.BaseName().value(); |
| // If the suggested_name is a root directory, file_part will be '\', and the |
| // call to GetSaveFileName below will fail. |
| if (file_part.size() == 1 && file_part[0] == L'\\') |
| @@ -281,7 +297,7 @@ |
| // Set up the initial directory for the dialog. |
| std::wstring directory; |
| if (!suggested_name.empty()) |
| - directory = FilePath(suggested_name).DirName().value(); |
| + directory = suggested_path.DirName().value(); |
| save_as.lpstrInitialDir = directory.c_str(); |
| save_as.lpstrTitle = NULL; |
| @@ -332,7 +348,7 @@ |
| // 'extension characters' in the title of the web page. |
| std::wstring suggested_ext; |
| if (!ignore_suggested_ext) |
| - suggested_ext = file_util::GetFileExtensionFromPath(suggested_name); |
| + suggested_ext = GetExtensionWithoutLeadingDot(suggested_path.Extension()); |
| // If we can't get the extension from the suggested_name, we use the default |
| // extension passed in. This is to cover cases like when saving a web page, |