Chromium Code Reviews| Index: chrome/browser/download/download_prefs.cc |
| diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc |
| index 19fc13e5536117e141c3af8abec0b020c2995e54..e8c6a8be53a93ee8f834698718ae273b6f1a71ff 100644 |
| --- a/chrome/browser/download/download_prefs.cc |
| +++ b/chrome/browser/download/download_prefs.cc |
| @@ -162,15 +162,30 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profile_(profile) { |
| std::vector<std::string> extensions; |
| base::SplitString(extensions_to_open, ':', &extensions); |
| - for (size_t i = 0; i < extensions.size(); ++i) { |
| + for (const auto& extension_string : extensions) { |
| #if defined(OS_POSIX) |
| - base::FilePath path(extensions[i]); |
| + base::FilePath::StringType extension = extension_string; |
| #elif defined(OS_WIN) |
| - base::FilePath path(base::UTF8ToWide(extensions[i])); |
| + base::FilePath::StringType extension = base::UTF8ToWide(extension_string); |
| #endif |
| - if (!extensions[i].empty() && |
| - download_util::GetFileDangerLevel(path) == download_util::NOT_DANGEROUS) |
| - auto_open_.insert(path.value()); |
| + // If it's empty or malformed or not allowed to open automatically, then |
| + // skip the entry. Any such entries will be dropped from preferences the |
| + // next time SaveAutoOpenState() is called. |
| + if (extension.empty() || |
| + *extension.begin() == base::FilePath::kExtensionSeparator) |
| + continue; |
| + // Construct something like ".<extension>", since the |
| + // IsAllowedToOpenAutomatically() needs a filename. |
|
palmer
2015/06/08 19:05:07
Nit: "...since |IsAllowedToOpenAutomatically| need
asanka
2015/06/09 00:38:10
Done
|
| + base::FilePath filename_with_extension = base::FilePath( |
| + base::FilePath::StringType(1, base::FilePath::kExtensionSeparator) + |
| + extension); |
| + |
| + // Note that the list of file types that are not allowed to open |
| + // automatically can change in the future. When the list is tightened, it is |
| + // expected that some entries in the users' auto open list will get dropped |
| + // permanently as a result. |
| + if (download_util::IsAllowedToOpenAutomatically(filename_with_extension)) |
| + auto_open_.insert(extension); |
| } |
| } |
| @@ -291,14 +306,16 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension( |
| if (extension == FILE_PATH_LITERAL("pdf") && ShouldOpenPdfInSystemReader()) |
| return true; |
| #endif |
| + |
| return auto_open_.find(extension) != auto_open_.end(); |
| } |
| bool DownloadPrefs::EnableAutoOpenBasedOnExtension( |
| const base::FilePath& file_name) { |
| base::FilePath::StringType extension = file_name.Extension(); |
| - if (extension.empty()) |
| + if (!download_util::IsAllowedToOpenAutomatically(file_name)) |
| return false; |
| + |
| DCHECK(extension[0] == base::FilePath::kExtensionSeparator); |
| extension.erase(0, 1); |