diff options
author | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-02 08:05:46 +0000 |
---|---|---|
committer | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-02 08:05:46 +0000 |
commit | 3314c2b1150ee3880adc4b876d4fc778c402eea0 (patch) | |
tree | dbc38df66416c3c21658fc77eb0ea98474be52a6 | |
parent | 8253bdb7d8201ba565f2951e81a6f4184c39ba09 (diff) | |
download | chromium_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.cc | 23 | ||||
-rw-r--r-- | chrome/browser/file_select_helper.h | 3 | ||||
-rw-r--r-- | content/common/view_messages.h | 6 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 4 |
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); } |