Index: webkit/plugins/ppapi/ppb_file_chooser_impl.cc |
diff --git a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc |
index 95a97a2a22ebcade418ffbd62215ad7dc961d8da..7eedd5956dce34bd08e1e9359815ebf93f1f6f20 100644 |
--- a/webkit/plugins/ppapi/ppb_file_chooser_impl.cc |
+++ b/webkit/plugins/ppapi/ppb_file_chooser_impl.cc |
@@ -81,12 +81,12 @@ class FileChooserCompletionImpl : public WebFileChooserCompletion { |
PPB_FileChooser_Impl::PPB_FileChooser_Impl( |
PP_Instance instance, |
PP_FileChooserMode_Dev mode, |
- const char* accept_mime_types) |
+ const char* accept_types) |
: Resource(::ppapi::OBJECT_IS_IMPL, instance), |
mode_(mode), |
next_chosen_file_index_(0) { |
- if (accept_mime_types) |
- accept_mime_types_ = std::string(accept_mime_types); |
+ if (accept_types) |
+ accept_types_ = std::string(accept_types); |
} |
PPB_FileChooser_Impl::~PPB_FileChooser_Impl() { |
@@ -96,12 +96,12 @@ PPB_FileChooser_Impl::~PPB_FileChooser_Impl() { |
PP_Resource PPB_FileChooser_Impl::Create( |
PP_Instance instance, |
PP_FileChooserMode_Dev mode, |
- const char* accept_mime_types) { |
+ const char* accept_types) { |
if (mode != PP_FILECHOOSERMODE_OPEN && |
mode != PP_FILECHOOSERMODE_OPENMULTIPLE) |
return 0; |
return (new PPB_FileChooser_Impl(instance, mode, |
- accept_mime_types))->GetReference(); |
+ accept_types))->GetReference(); |
} |
PPB_FileChooser_Impl* PPB_FileChooser_Impl::AsPPB_FileChooser_Impl() { |
@@ -225,7 +225,7 @@ int32_t PPB_FileChooser_Impl::ShowWithoutUserGesture0_5( |
} else { |
params.multiSelect = (mode_ == PP_FILECHOOSERMODE_OPENMULTIPLE); |
} |
- params.acceptMIMETypes = ParseAcceptValue(accept_mime_types_); |
+ params.acceptTypes = ParseAcceptValue(accept_types_); |
params.directory = false; |
PluginDelegate* plugin_delegate = ResourceHelper::GetPluginDelegate(this); |
@@ -248,25 +248,29 @@ PP_Resource PPB_FileChooser_Impl::GetNextChosenFile() { |
} |
std::vector<WebString> PPB_FileChooser_Impl::ParseAcceptValue( |
- const std::string& accept_mime_types) { |
- if (accept_mime_types.empty()) |
+ const std::string& accept_types) { |
+ if (accept_types.empty()) |
return std::vector<WebString>(); |
- std::vector<std::string> mime_type_list; |
- base::SplitString(accept_mime_types, ',', &mime_type_list); |
- std::vector<WebString> normalized_mime_type_list; |
- normalized_mime_type_list.reserve(mime_type_list.size()); |
- for (size_t i = 0; i < mime_type_list.size(); ++i) { |
- std::string mime_type = mime_type_list[i]; |
- TrimWhitespaceASCII(mime_type, TRIM_ALL, &mime_type); |
- if (mime_type.empty()) |
+ std::vector<std::string> type_list; |
+ base::SplitString(accept_types, ',', &type_list); |
+ std::vector<WebString> normalized_type_list; |
+ normalized_type_list.reserve(type_list.size()); |
+ for (size_t i = 0; i < type_list.size(); ++i) { |
+ std::string type = type_list[i]; |
+ TrimWhitespaceASCII(type, TRIM_ALL, &type); |
+ |
+ // If the type is a single character, it definitely cannot be valid. In the |
+ // case of a file extension it would be a single ".". In the case of a MIME |
+ // type it would just be a "/". |
+ if (type.length() < 2) |
continue; |
- if (mime_type.find_first_of('/') == std::string::npos) |
+ if (type.find_first_of('/') == std::string::npos && type[0] != '.') |
continue; |
- StringToLowerASCII(&mime_type); |
- normalized_mime_type_list.push_back(WebString::fromUTF8(mime_type.data(), |
- mime_type.size())); |
+ StringToLowerASCII(&type); |
+ normalized_type_list.push_back(WebString::fromUTF8(type.data(), |
+ type.size())); |
} |
- return normalized_mime_type_list; |
+ return normalized_type_list; |
} |
} // namespace ppapi |