summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-02 08:05:46 +0000
committertkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-02 08:05:46 +0000
commit3314c2b1150ee3880adc4b876d4fc778c402eea0 (patch)
treedbc38df66416c3c21658fc77eb0ea98474be52a6
parent8253bdb7d8201ba565f2951e81a6f4184c39ba09 (diff)
downloadchromium_src-3314c2b1150ee3880adc4b876d4fc778c402eea0.zip
chromium_src-3314c2b1150ee3880adc4b876d4fc778c402eea0.tar.gz
chromium_src-3314c2b1150ee3880adc4b876d4fc778c402eea0.tar.bz2
Use WebFileChooserParams::accpetMIMETypes instead of acceptTypes.
acceptMIMETypes is a list of valid lowercased MIME types. We can remove spliting, lowercasing, and stripping code in GetFileTypesFromAcceptType(). BUG=none TEST=none because this doesn't make any behavior change. Review URL: http://codereview.chromium.org/8401030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108252 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/file_select_helper.cc23
-rw-r--r--chrome/browser/file_select_helper.h3
-rw-r--r--content/common/view_messages.h6
-rw-r--r--content/renderer/render_view_impl.cc4
4 files changed, 17 insertions, 19 deletions
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc
index f5962bb..4e13308 100644
--- a/chrome/browser/file_select_helper.cc
+++ b/chrome/browser/file_select_helper.cc
@@ -196,16 +196,10 @@ void FileSelectHelper::OnListDone(int id, int error) {
}
SelectFileDialog::FileTypeInfo* FileSelectHelper::GetFileTypesFromAcceptType(
- const string16& accept_types) {
+ const std::vector<string16>& accept_types) {
if (accept_types.empty())
return NULL;
- // Split the accept-type string on commas.
- std::vector<string16> mime_types;
- base::SplitStringUsingSubstr(accept_types, ASCIIToUTF16(","), &mime_types);
- if (mime_types.empty())
- return NULL;
-
// Create FileTypeInfo and pre-allocate for the first extension list.
scoped_ptr<SelectFileDialog::FileTypeInfo> file_type(
new SelectFileDialog::FileTypeInfo());
@@ -216,13 +210,14 @@ SelectFileDialog::FileTypeInfo* FileSelectHelper::GetFileTypesFromAcceptType(
// Find the correspondinge extensions.
int valid_type_count = 0;
int description_id = 0;
- for (size_t i = 0; i < mime_types.size(); ++i) {
- string16 mime_type = mime_types[i];
- std::string ascii_mime_type = StringToLowerASCII(UTF16ToASCII(mime_type));
-
- TrimWhitespace(ascii_mime_type, TRIM_ALL, &ascii_mime_type);
- if (ascii_mime_type.empty())
- continue;
+ for (size_t i = 0; i < accept_types.size(); ++i) {
+ std::string ascii_mime_type = UTF16ToASCII(accept_types[i]);
+ // WebKit normalizes MIME types. See HTMLInputElement::acceptMIMETypes().
+ DCHECK(StringToLowerASCII(ascii_mime_type) == ascii_mime_type)
+ << "A MIME type contains uppercase letter: " << ascii_mime_type;
+ DCHECK(TrimWhitespaceASCII(ascii_mime_type, TRIM_ALL, &ascii_mime_type)
+ == TRIM_NONE)
+ << "A MIME type contains whitespace: '" << ascii_mime_type << "'";
size_t old_extension_size = extensions->size();
if (ascii_mime_type == "image/*") {
diff --git a/chrome/browser/file_select_helper.h b/chrome/browser/file_select_helper.h
index eb31f0c..f3a6ffa 100644
--- a/chrome/browser/file_select_helper.h
+++ b/chrome/browser/file_select_helper.h
@@ -108,8 +108,9 @@ class FileSelectHelper
// Helper method to get allowed extensions for select file dialog from
// the specified accept types as defined in the spec:
// http://whatwg.org/html/number-state.html#attr-input-accept
+ // |accept_types| contains only valid lowercased MIME types.
SelectFileDialog::FileTypeInfo* GetFileTypesFromAcceptType(
- const string16& accept_types);
+ const std::vector<string16>& accept_types);
// Profile used to set/retrieve the last used directory.
Profile* profile_;
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 65ca5d6..2371ed5 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -462,9 +462,9 @@ IPC_STRUCT_BEGIN(ViewHostMsg_RunFileChooser_Params)
// Default file name to select in the dialog.
IPC_STRUCT_MEMBER(FilePath, default_file_name)
- // A comma-separated MIME types such as "audio/*,text/plain", that is used
- // to restrict selectable files to such types.
- IPC_STRUCT_MEMBER(string16, accept_types)
+ // A list of valid lower-cased MIME types specified in an input element. It is
+ // used to restrict selectable files to such types.
+ IPC_STRUCT_MEMBER(std::vector<string16>, accept_types)
IPC_STRUCT_END()
// This message is used for supporting popup menus on Mac OS X using native
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 95d89fc..b1b1598 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1579,7 +1579,9 @@ bool RenderViewImpl::runFileChooser(
ipc_params.title = params.title;
ipc_params.default_file_name =
webkit_glue::WebStringToFilePath(params.initialValue);
- ipc_params.accept_types = params.acceptTypes;
+ ipc_params.accept_types.reserve(params.acceptMIMETypes.size());
+ for (size_t i = 0; i < params.acceptMIMETypes.size(); ++i)
+ ipc_params.accept_types.push_back(params.acceptMIMETypes[i]);
return ScheduleFileChooser(ipc_params, chooser_completion);
}