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..589a18f44a077c2f79c37352ae2e460f257dd2ee 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 |
+ // IsAllowedToOpenAutomatically() needs a filename. |
+ 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); |