Changeset 38755 in webkit


Ignore:
Timestamp:
Nov 25, 2008 11:31:32 AM (15 years ago)
Author:
darin@chromium.org
Message:

2008-11-24 Jungshik Shin <jshin@chromium.org>

Reviewed by Darin Adler.

For Unicode encodings other than UTF-8, use UTF-8 for
form submission and URL query part encoding.

See https://bugs.webkit.org/show_bug.cgi?id=21635

Tests: http/tests/misc/submit-get-in-utf16be.html

http/tests/misc/submit-get-in-utf16le.html
http/tests/misc/submit-get-in-utf32be.html
http/tests/misc/submit-get-in-utf32le.html
http/tests/misc/submit-get-in-utf7.html
http/tests/misc/submit-post-in-utf16be.html
http/tests/misc/submit-post-in-utf16le.html
http/tests/misc/submit-post-in-utf32be.html
http/tests/misc/submit-post-in-utf32le.html
http/tests/misc/submit-post-in-utf7.html
http/tests/misc/url-in-utf16be.html
http/tests/misc/url-in-utf16le.html
http/tests/misc/url-in-utf32be.html
http/tests/misc/url-in-utf32le.html
http/tests/misc/url-in-utf7.html


  • html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::formData):
  • loader/TextResourceDecoder.cpp: (WebCore::TextResourceDecoder::setEncoding):
  • platform/KURL.cpp: (WebCore::KURL::KURL):
  • platform/text/TextEncoding.cpp: (WebCore::UTF7Encoding): (WebCore::TextEncoding::isNonByteBasedEncoding): (WebCore::TextEncoding::closestByteBasedEquivalent): (WebCore::TextEncoding::encodingForFormSubmission):
  • platform/text/TextEncoding.h:
Location:
trunk
Files:
18 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r38751 r38755  
     12008-11-25  Jungshik Shin  <jshin@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        For Unicode encodings other than UTF-8, use UTF-8 for
     6        form submission and URL query part encoding.
     7
     8        See https://bugs.webkit.org/show_bug.cgi?id=21635
     9
     10        * http/tests/misc/submit-get-in-utf16be-expected.txt: Added.
     11        * http/tests/misc/submit-get-in-utf16be.html: Added.
     12        * http/tests/misc/submit-get-in-utf16le-expected.txt: Added.
     13        * http/tests/misc/submit-get-in-utf16le.html: Added.
     14        * http/tests/misc/submit-get-in-utf32be-expected.txt: Added.
     15        * http/tests/misc/submit-get-in-utf32be.html: Added.
     16        * http/tests/misc/submit-get-in-utf32le-expected.txt: Added.
     17        * http/tests/misc/submit-get-in-utf32le.html: Added.
     18        * http/tests/misc/submit-get-in-utf7-expected.txt: Added.
     19        * http/tests/misc/submit-get-in-utf7.html: Added.
     20        * http/tests/misc/submit-post-in-utf16be-expected.txt: Added.
     21        * http/tests/misc/submit-post-in-utf16be.html: Added.
     22        * http/tests/misc/submit-post-in-utf16le-expected.txt: Added.
     23        * http/tests/misc/submit-post-in-utf16le.html: Added.
     24        * http/tests/misc/submit-post-in-utf32be-expected.txt: Added.
     25        * http/tests/misc/submit-post-in-utf32be.html: Added.
     26        * http/tests/misc/submit-post-in-utf32le-expected.txt: Added.
     27        * http/tests/misc/submit-post-in-utf32le.html: Added.
     28        * http/tests/misc/submit-post-in-utf7-expected.txt: Added.
     29        * http/tests/misc/submit-post-in-utf7.html: Added.
     30        * http/tests/misc/url-in-utf16be-expected.txt: Added.
     31        * http/tests/misc/url-in-utf16be.html: Added.
     32        * http/tests/misc/url-in-utf16le-expected.txt: Added.
     33        * http/tests/misc/url-in-utf16le.html: Added.
     34        * http/tests/misc/url-in-utf32be-expected.txt: Added.
     35        * http/tests/misc/url-in-utf32be.html: Added.
     36        * http/tests/misc/url-in-utf32le-expected.txt: Added.
     37        * http/tests/misc/url-in-utf32le.html: Added.
     38        * http/tests/misc/url-in-utf7-expected.txt: Added.
     39        * http/tests/misc/url-in-utf7.html: Added.
     40
    1412008-11-25  Alexey Proskuryakov  <ap@webkit.org>
    242
  • trunk/WebCore/ChangeLog

    r38754 r38755  
     12008-11-24  Jungshik Shin  <jshin@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        For Unicode encodings other than UTF-8, use UTF-8 for
     6        form submission and URL query part encoding.
     7
     8        See https://bugs.webkit.org/show_bug.cgi?id=21635
     9
     10        Tests: http/tests/misc/submit-get-in-utf16be.html
     11               http/tests/misc/submit-get-in-utf16le.html
     12               http/tests/misc/submit-get-in-utf32be.html
     13               http/tests/misc/submit-get-in-utf32le.html
     14               http/tests/misc/submit-get-in-utf7.html
     15               http/tests/misc/submit-post-in-utf16be.html
     16               http/tests/misc/submit-post-in-utf16le.html
     17               http/tests/misc/submit-post-in-utf32be.html
     18               http/tests/misc/submit-post-in-utf32le.html
     19               http/tests/misc/submit-post-in-utf7.html
     20               http/tests/misc/url-in-utf16be.html
     21               http/tests/misc/url-in-utf16le.html
     22               http/tests/misc/url-in-utf32be.html
     23               http/tests/misc/url-in-utf32le.html
     24               http/tests/misc/url-in-utf7.html
     25 
     26        * html/HTMLFormElement.cpp:
     27        (WebCore::HTMLFormElement::formData):
     28        * loader/TextResourceDecoder.cpp:
     29        (WebCore::TextResourceDecoder::setEncoding):
     30        * platform/KURL.cpp:
     31        (WebCore::KURL::KURL):
     32        * platform/text/TextEncoding.cpp:
     33        (WebCore::UTF7Encoding):
     34        (WebCore::TextEncoding::isNonByteBasedEncoding):
     35        (WebCore::TextEncoding::closestByteBasedEquivalent):
     36        (WebCore::TextEncoding::encodingForFormSubmission):
     37        * platform/text/TextEncoding.h:
     38
    1392008-11-24  Julien Chaffraix  <jchaffraix@webkit.org>
    240
  • trunk/WebCore/html/HTMLFormElement.cpp

    r38094 r38755  
    237237{
    238238    Vector<char> encodedData;
    239     TextEncoding encoding = dataEncoding();
     239    TextEncoding encoding = dataEncoding().encodingForFormSubmission();
    240240
    241241    RefPtr<FormData> result = FormData::create();
  • trunk/WebCore/loader/TextResourceDecoder.cpp

    r38240 r38755  
    347347        m_decoder.reset("windows-1252");
    348348    else if (source == EncodingFromMetaTag || source == EncodingFromXMLHeader || source == EncodingFromCSSCharset)       
    349         m_decoder.reset(encoding.closest8BitEquivalent());
     349        m_decoder.reset(encoding.closestByteBasedEquivalent());
    350350    else
    351351        m_decoder.reset(encoding);
  • trunk/WebCore/platform/KURL.cpp

    r38746 r38755  
    321321KURL::KURL(const KURL& base, const String& relative, const TextEncoding& encoding)
    322322{
    323     init(base, relative, encoding);
     323    // For UTF-{7,16,32}, we want to use UTF-8 for the query part as
     324    // we do when submitting a form. A form with GET method
     325    // has its contents added to a URL as query params and it makes sense
     326    // to be consistent.
     327    init(base, relative, encoding.encodingForFormSubmission());
    324328}
    325329
  • trunk/WebCore/platform/text/TextEncoding.cpp

    r38418 r38755  
    5151}
    5252
     53static const TextEncoding& UTF7Encoding()
     54{
     55    static TextEncoding globalUTF7Encoding("UTF-7");
     56    return globalUTF7Encoding;
     57}
     58
    5359TextEncoding::TextEncoding(const char* name)
    5460    : m_name(atomicCanonicalTextEncodingName(name))
     
    156162}
    157163
    158 const TextEncoding& TextEncoding::closest8BitEquivalent() const
    159 {
    160     if (*this == UTF16BigEndianEncoding() || *this == UTF16LittleEndianEncoding())
     164bool TextEncoding::isNonByteBasedEncoding() const
     165{
     166    return *this == UTF16LittleEndianEncoding()
     167           || *this == UTF16BigEndianEncoding()
     168           || *this == UTF32BigEndianEncoding()
     169           || *this == UTF32LittleEndianEncoding();
     170}
     171
     172const TextEncoding& TextEncoding::closestByteBasedEquivalent() const
     173{
     174    if (isNonByteBasedEncoding())
     175        return UTF8Encoding();
     176    return *this;
     177}
     178
     179// HTML5 specifies that UTF-8 be used in form submission when a form is
     180// is a part of a document in UTF-16 probably because UTF-16 is not a
     181// byte-based encoding and can contain 0x00. By extension, the same
     182// should be done for UTF-32. In case of UTF-7, it is a byte-based encoding,
     183// but it's fraught with problems and we'd rather steer clear of it.
     184const TextEncoding& TextEncoding::encodingForFormSubmission() const
     185{
     186    if (isNonByteBasedEncoding() || *this == UTF7Encoding())
    161187        return UTF8Encoding();
    162188    return *this;
     
    199225}
    200226
    201 
    202227const TextEncoding& UTF8Encoding()
    203228{
  • trunk/WebCore/platform/text/TextEncoding.h

    r31316 r38755  
    4646        bool isJapanese() const;
    4747        UChar backslashAsCurrencySymbol() const;
    48         const TextEncoding& closest8BitEquivalent() const;
     48        const TextEncoding& closestByteBasedEquivalent() const;
     49        const TextEncoding& encodingForFormSubmission() const;
    4950
    5051        String decode(const char* str, size_t length) const
     
    5859    private:
    5960        const char* m_name;
     61        bool isNonByteBasedEncoding() const;
    6062    };
    6163
Note: See TracChangeset for help on using the changeset viewer.