⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 120410 in webkit


Ignore:
Timestamp:
Jun 14, 2012, 11:38:25 PM (14 years ago)
Author:
tkent@chromium.org
Message:

Support file extensions in HTMLInputElement::accept
https://bugs.webkit.org/show_bug.cgi?id=88298

Reviewed by Hajime Morita.

Source/WebCore:

The WHATWG specification added file extensions supoprt for
HTMLInputElement::accept recently.

In the WebCore FileChooser interface, we rejected invalid MIME type
strings in HTMLInputElement::acceptMIMETypes(), and platform file
choosers don't expect that it containts file extensions. So, this patch
introduces additional member "acceptFileExtensions" to
FileChooserSettings, and it contains only file extensions specified by
an accept attribute.

  • html/FileInputType.cpp:

Sets HTMLInputElement::acceptFileExtensions() to
FileChooserSettings::acceptFileExtensions.
(WebCore::FileInputType::handleDOMActivateEvent):
(WebCore::FileInputType::receiveDropForDirectoryUpload):

  • html/HTMLInputElement.cpp:

(WebCore::isValidFileExtension): Added.
(WebCore::parseAcceptAttribute):
Common part for acceptMIMETyps() and acceptFileExtensions().
(WebCore::HTMLInputElement::acceptMIMETypes):
Uses parseAcceptAttribute() with isValidMIMEType().
(WebCore::HTMLInputElement::acceptFileExtensions):
Added. Uses parseAcceptAttribute() with isValidFileExtension().

  • html/HTMLInputElement.h:

(HTMLInputElement): Add acceptFileExtensions().

  • platform/FileChooser.h:

(FileChooserSettings): Add acceptFileExtensions and acceptTypes().

  • platform/FileChooser.cpp:

(WebCore::FileChooserSettings::acceptTypes): Added.

Source/WebKit/chromium:

  • src/ChromeClientImpl.cpp:

(WebKit::ChromeClientImpl::runOpenPanel):
Use FileChooserSettings::acceptTypes() to get both of MIME types and file extensions.

Location:
trunk/Source
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r120406 r120410  
     12012-06-14  Kent Tamura  <tkent@chromium.org>
     2
     3        Support file extensions in HTMLInputElement::accept
     4        https://bugs.webkit.org/show_bug.cgi?id=88298
     5
     6        Reviewed by Hajime Morita.
     7
     8        The WHATWG specification added file extensions supoprt for
     9        HTMLInputElement::accept recently.
     10
     11        In the WebCore FileChooser interface, we rejected invalid MIME type
     12        strings in HTMLInputElement::acceptMIMETypes(), and platform file
     13        choosers don't expect that it containts file extensions. So, this patch
     14        introduces additional member "acceptFileExtensions" to
     15        FileChooserSettings, and it contains only file extensions specified by
     16        an accept attribute.
     17
     18        * html/FileInputType.cpp:
     19        Sets HTMLInputElement::acceptFileExtensions() to
     20        FileChooserSettings::acceptFileExtensions.
     21        (WebCore::FileInputType::handleDOMActivateEvent):
     22        (WebCore::FileInputType::receiveDropForDirectoryUpload):
     23        * html/HTMLInputElement.cpp:
     24        (WebCore::isValidFileExtension): Added.
     25        (WebCore::parseAcceptAttribute):
     26        Common part for acceptMIMETyps() and acceptFileExtensions().
     27        (WebCore::HTMLInputElement::acceptMIMETypes):
     28        Uses parseAcceptAttribute() with isValidMIMEType().
     29        (WebCore::HTMLInputElement::acceptFileExtensions):
     30        Added. Uses parseAcceptAttribute() with isValidFileExtension().
     31        * html/HTMLInputElement.h:
     32        (HTMLInputElement): Add acceptFileExtensions().
     33        * platform/FileChooser.h:
     34        (FileChooserSettings): Add acceptFileExtensions and acceptTypes().
     35        * platform/FileChooser.cpp:
     36        (WebCore::FileChooserSettings::acceptTypes): Added.
     37
    1382012-06-14  James Robinson  <jamesr@chromium.org>
    239
  • trunk/Source/WebCore/html/FileInputType.cpp

    r120081 r120410  
    189189#endif
    190190        settings.acceptMIMETypes = input->acceptMIMETypes();
     191        settings.acceptFileExtensions = input->acceptFileExtensions();
    191192        settings.selectedFiles = m_fileList->paths();
    192193#if ENABLE(MEDIA_CAPTURE)
     
    376377        settings.selectedFiles.append(paths[0]);
    377378        settings.acceptMIMETypes = input->acceptMIMETypes();
     379        settings.acceptFileExtensions = input->acceptFileExtensions();
    378380        chrome->enumerateChosenDirectory(newFileChooser(settings));
    379381    }
  • trunk/Source/WebCore/html/HTMLInputElement.cpp

    r120313 r120410  
    11361136}
    11371137
    1138 static inline bool isValidMIMEType(const String& type)
     1138static bool isValidMIMEType(const String& type)
    11391139{
    11401140    size_t slashPosition = type.find('/');
     
    11481148}
    11491149
    1150 Vector<String> HTMLInputElement::acceptMIMETypes()
    1151 {
    1152     Vector<String> mimeTypes;
    1153 
    1154     String acceptString = accept();
     1150static bool isValidFileExtension(const String& type)
     1151{
     1152    if (type.length() < 2)
     1153        return false;
     1154    return type[0] == '.';
     1155}
     1156
     1157static Vector<String> parseAcceptAttribute(const String& acceptString, bool (*predicate)(const String&))
     1158{
     1159    Vector<String> types;
    11551160    if (acceptString.isEmpty())
    1156         return mimeTypes;
     1161        return types;
    11571162
    11581163    Vector<String> splitTypes;
    11591164    acceptString.split(',', false, splitTypes);
    11601165    for (size_t i = 0; i < splitTypes.size(); ++i) {
    1161         String trimmedMimeType = stripLeadingAndTrailingHTMLSpaces(splitTypes[i]);
    1162         if (trimmedMimeType.isEmpty())
     1166        String trimmedType = stripLeadingAndTrailingHTMLSpaces(splitTypes[i]);
     1167        if (trimmedType.isEmpty())
    11631168            continue;
    1164         if (!isValidMIMEType(trimmedMimeType))
     1169        if (!predicate(trimmedType))
    11651170            continue;
    1166         mimeTypes.append(trimmedMimeType.lower());
    1167     }
    1168 
    1169     return mimeTypes;
     1171        types.append(trimmedType.lower());
     1172    }
     1173
     1174    return types;
     1175}
     1176
     1177Vector<String> HTMLInputElement::acceptMIMETypes()
     1178{
     1179    return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidMIMEType);
     1180}
     1181
     1182Vector<String> HTMLInputElement::acceptFileExtensions()
     1183{
     1184    return parseAcceptAttribute(fastGetAttribute(acceptAttr), isValidFileExtension);
    11701185}
    11711186
  • trunk/Source/WebCore/html/HTMLInputElement.h

    r120313 r120410  
    198198
    199199    Vector<String> acceptMIMETypes();
     200    Vector<String> acceptFileExtensions();
    200201    String accept() const;
    201202    String alt() const;
  • trunk/Source/WebCore/platform/FileChooser.cpp

    r110557 r120410  
    100100}
    101101
     102Vector<String> FileChooserSettings::acceptTypes() const
     103{
     104    Vector<String> acceptTypes;
     105    acceptTypes.reserveCapacity(acceptMIMETypes.size() + acceptFileExtensions.size());
     106    acceptTypes.append(acceptMIMETypes);
     107    acceptTypes.append(acceptFileExtensions);
     108    return acceptTypes;
    102109}
     110
     111}
  • trunk/Source/WebCore/platform/FileChooser.h

    r116592 r120410  
    5656#endif
    5757    Vector<String> acceptMIMETypes;
     58    Vector<String> acceptFileExtensions;
    5859    Vector<String> selectedFiles;
    5960#if ENABLE(MEDIA_CAPTURE)
    6061    String capture;
    6162#endif
     63
     64    // Returns a combined vector of acceptMIMETypes and acceptFileExtensions.
     65    Vector<String> acceptTypes() const;
    6266};
    6367
  • trunk/Source/WebKit/chromium/ChangeLog

    r120408 r120410  
     12012-06-14  Kent Tamura  <tkent@chromium.org>
     2
     3        Support file extensions in HTMLInputElement::accept
     4        https://bugs.webkit.org/show_bug.cgi?id=88298
     5
     6        Reviewed by Hajime Morita.
     7
     8        * src/ChromeClientImpl.cpp:
     9        (WebKit::ChromeClientImpl::runOpenPanel):
     10        Use FileChooserSettings::acceptTypes() to get both of MIME types and file extensions.
     11
    1122012-06-14  Kaustubh Atrawalkar  <kaustubh@motorola.com>
    213
  • trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp

    r119752 r120410  
    719719    params.directory = false;
    720720#endif
    721     params.acceptTypes = fileChooser->settings().acceptMIMETypes;
     721    params.acceptTypes = fileChooser->settings().acceptTypes();
    722722    params.selectedFiles = fileChooser->settings().selectedFiles;
    723723    if (params.selectedFiles.size() > 0)
Note: See TracChangeset for help on using the changeset viewer.