Changeset 98896 in webkit


Ignore:
Timestamp:
Oct 31, 2011 4:02:48 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

text/plain form encoding ignored and incorrectly specified in request header.
https://bugs.webkit.org/show_bug.cgi?id=20795

Patch by Vineet Chaudhary <vineet.chaudhary@motorola.com> on 2011-10-31
Reviewed by Darin Adler.

Source/WebCore:

This patch fixes the behaviour of forms where enctype is set to
text/plain, encoding is also text/plain.

Tests: fast/forms/form-get-textplain.html

http/tests/misc/form-post-textplain.html

  • loader/FormSubmission.cpp:

(WebCore::FormSubmission::create):

  • platform/network/FormData.cpp:

(WebCore::FormData::create):
(WebCore::FormData::appendKeyValuePairItems):

  • platform/network/FormData.h:

(WebCore::FormData::parseEncodingType):

  • platform/network/FormDataBuilder.cpp:

(WebCore::FormDataBuilder::addKeyValuePairAsFormData): Modified encoding scheme for text/plain.

  • platform/network/FormDataBuilder.h:

LayoutTests:

Added tests for GET and POST methods for text/plain enctype.
Forms submitted using GET with a content-type of text/plain actually,
send data in URL encoded in the URL.
Forms with POST method and content-type of text/plain actually send data in text/plain.
Modified expected results for mailto tests as per the new behavior.

  • fast/forms/form-get-textplain-expected.txt: Added.
  • fast/forms/form-get-textplain.html: Added.
  • fast/forms/mailto/post-multiple-items-text-plain-expected.txt:
  • fast/forms/mailto/post-text-plain-expected.txt:
  • fast/forms/mailto/post-text-plain-with-accept-charset-expected.txt:
  • http/tests/misc/form-post-textplain-expected.txt: Added.
  • http/tests/misc/form-post-textplain.html: Added.
  • http/tests/misc/resources/form-post-textplain.php: Added.
  • platform/chromium/test_expectations.txt:
  • platform/gtk/fast/forms/mailto/formenctype-attribute-button-html-expected.txt:
  • platform/gtk/fast/forms/mailto/formenctype-attribute-input-html-expected.txt:
  • platform/qt/test_expectations.txt:
  • platform/win/test_expectations.txt:
Location:
trunk
Files:
5 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r98888 r98896  
     12011-10-31  Vineet Chaudhary  <vineet.chaudhary@motorola.com>
     2
     3        text/plain form encoding ignored and incorrectly specified in request header.
     4        https://bugs.webkit.org/show_bug.cgi?id=20795
     5
     6        Reviewed by Darin Adler.
     7
     8        Added tests for GET and POST methods for text/plain enctype.
     9        Forms submitted using GET with a content-type of text/plain actually,
     10        send data in URL encoded in the URL.
     11        Forms with POST method and content-type of text/plain actually send data in text/plain.
     12        Modified expected results for mailto tests as per the new behavior.
     13
     14        * fast/forms/form-get-textplain-expected.txt: Added.
     15        * fast/forms/form-get-textplain.html: Added.
     16        * fast/forms/mailto/post-multiple-items-text-plain-expected.txt:
     17        * fast/forms/mailto/post-text-plain-expected.txt:
     18        * fast/forms/mailto/post-text-plain-with-accept-charset-expected.txt:
     19        * http/tests/misc/form-post-textplain-expected.txt: Added.
     20        * http/tests/misc/form-post-textplain.html: Added.
     21        * http/tests/misc/resources/form-post-textplain.php: Added.
     22        * platform/chromium/test_expectations.txt:
     23        * platform/gtk/fast/forms/mailto/formenctype-attribute-button-html-expected.txt:
     24        * platform/gtk/fast/forms/mailto/formenctype-attribute-input-html-expected.txt:
     25        * platform/qt/test_expectations.txt:
     26        * platform/win/test_expectations.txt:
     27
    1282011-10-31  Arko Saha  <arko@motorola.com>
    229
  • trunk/LayoutTests/fast/forms/mailto/post-multiple-items-text-plain-expected.txt

    r39178 r98896  
    1 Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%26%3D%2C%3B%3F%22%2B%0D%0A with navigation type 'form submitted'
     1Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%0D%0A%3D%2C%3B%3F%22%20%0D%0A with navigation type 'form submitted'
    22Field 1:  Field 2: 
  • trunk/LayoutTests/fast/forms/mailto/post-text-plain-expected.txt

    r39178 r98896  
    1 Policy delegate: attempt to load mailto:one@example.org?cc=two@example.org&subject=%C3%BC%D0%B0%D1%91&body=Stra%C3%9Fe%3D%C3%BC%D0%B0%D1%91%0D%0A with navigation type 'form submitted'
     1Policy delegate: attempt to load mailto:one@example.org?cc=two@example.org&subject=%C3%BC%D0%B0%D1%91&body=Stra%C3%83%C5%B8e%3D%C3%83%C2%BC%C3%90%C2%B0%C3%91%E2%80%98%0D%0A with navigation type 'form submitted'
    22 
  • trunk/LayoutTests/fast/forms/mailto/post-text-plain-with-accept-charset-expected.txt

    r39178 r98896  
    1 Policy delegate: attempt to load mailto:one@example.org?cc=two@example.org&subject=%C3%BC%D0%B0%D1%91&body=Stra%C3%9Fe%3D%C3%BC%D0%B0%D1%91%0D%0A with navigation type 'form submitted'
     1Policy delegate: attempt to load mailto:one@example.org?cc=two@example.org&subject=%C3%BC%D0%B0%D1%91&body=Stra%C3%83%C5%B8e%3D%C3%83%C2%BC%C3%90%C2%B0%C3%91%E2%80%98%0D%0A with navigation type 'form submitted'
    22 
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r98884 r98896  
    38813881BUGWK70641 SNOWLEOPARD : fast/frames/sandboxed-iframe-scripting.html = PASS CRASH
    38823882
     3883// Needs rebaseline
     3884BUGWK20795 : fast/forms/mailto/formenctype-attribute-input-html.html = TEXT
     3885BUGWK20795 : fast/forms/mailto/formenctype-attribute-button-html.html = TEXT
     3886
    38833887BUGWK70749 SNOWLEOPARD CPU GPU : fast/ruby/base-shorter-than-text.html = IMAGE+TEXT PASS
    38843888
  • trunk/LayoutTests/platform/gtk/fast/forms/mailto/formenctype-attribute-button-html-expected.txt

    r72015 r98896  
    1 Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%26%3D%2C%3B%3F%22%2B%0D%0A with navigation type 'form submitted'
     1Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%0D%0A%3D%2C%3B%3F%22%20%0D%0A with navigation type 'form submitted'
    22Field 1:  Field 2: 
  • trunk/LayoutTests/platform/gtk/fast/forms/mailto/formenctype-attribute-input-html-expected.txt

    r72015 r98896  
    1 Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%26%3D%2C%3B%3F%22%2B%0D%0A with navigation type 'form submitted'
     1Policy delegate: attempt to load mailto:?body=to%3Done%40example.org%0D%0Abody%3DLine%201%0D%0ALine%202%0D%0A%40%0D%0A%3D%2C%3B%3F%22%20%0D%0A with navigation type 'form submitted'
    22Field 1:  Field 2: 
  • trunk/LayoutTests/platform/qt/test_expectations.txt

    r98490 r98896  
    2020BUG_QT_SLOW SLOW DEBUG: fast/overflow/lots-of-sibling-inline-boxes.html = PASS
    2121
     22// Needs rebaseline
     23BUGWK20795 : fast/forms/mailto/formenctype-attribute-input-html.html = TEXT
     24BUGWK20795 : fast/forms/mailto/formenctype-attribute-button-html.html = TEXT
     25
    2226BUGWK67007 DEBUG : fast/ruby/after-block-doesnt-crash.html = CRASH
    2327BUGWK67007 DEBUG : fast/ruby/after-table-doesnt-crash.html = CRASH
  • trunk/LayoutTests/platform/win/test_expectations.txt

    r96958 r98896  
    88BUGWK67007 DEBUG : fast/ruby/generated-before-and-after-counter-doesnt-crash.html = CRASH
    99
     10// Needs rebaseline
     11BUGWK20795 : fast/forms/mailto/formenctype-attribute-input-html.html = TEXT
     12BUGWK20795 : fast/forms/mailto/formenctype-attribute-button-html.html = TEXT
     13
    1014// Need rebaseline
    1115BUGWK65361 : fast/forms/input-disabled-color.html = IMAGE+TEXT
  • trunk/Source/WebCore/ChangeLog

    r98895 r98896  
     12011-10-31  Vineet Chaudhary  <vineet.chaudhary@motorola.com>
     2
     3        text/plain form encoding ignored and incorrectly specified in request header.
     4        https://bugs.webkit.org/show_bug.cgi?id=20795
     5
     6        Reviewed by Darin Adler.
     7
     8        This patch fixes the behaviour of forms where enctype is set to
     9        text/plain, encoding is also text/plain.
     10
     11        Tests: fast/forms/form-get-textplain.html
     12               http/tests/misc/form-post-textplain.html
     13
     14        * loader/FormSubmission.cpp:
     15        (WebCore::FormSubmission::create):
     16        * platform/network/FormData.cpp:
     17        (WebCore::FormData::create):
     18        (WebCore::FormData::appendKeyValuePairItems):
     19        * platform/network/FormData.h:
     20        (WebCore::FormData::parseEncodingType):
     21        * platform/network/FormDataBuilder.cpp:
     22        (WebCore::FormDataBuilder::addKeyValuePairAsFormData): Modified encoding scheme for text/plain.
     23        * platform/network/FormDataBuilder.h:
     24
    1252011-10-31  John Gregg  <johnnyg@google.com>
    226
  • trunk/Source/WebCore/loader/FormSubmission.cpp

    r98172 r98896  
    200200        boundary = formData->boundary().data();
    201201    } else {
    202         formData = FormData::create(*(static_cast<FormDataList*>(domFormData.get())), domFormData->encoding());
     202        formData = FormData::create(*(static_cast<FormDataList*>(domFormData.get())), domFormData->encoding(), attributes.method() == GetMethod ? FormData::FormURLEncoded : FormData::parseEncodingType(encodingType));
    203203        if (copiedAttributes.method() == PostMethod && isMailtoForm) {
    204204            // Convert the form data into a string that we put into the URL.
  • trunk/Source/WebCore/platform/network/FormData.cpp

    r97274 r98896  
    100100}
    101101
    102 PassRefPtr<FormData> FormData::create(const FormDataList& list, const TextEncoding& encoding)
     102PassRefPtr<FormData> FormData::create(const FormDataList& list, const TextEncoding& encoding, EncodingType encodingType)
    103103{
    104104    RefPtr<FormData> result = create();
    105     result->appendKeyValuePairItems(list, encoding, false, 0);
     105    result->appendKeyValuePairItems(list, encoding, false, 0, encodingType);
    106106    return result.release();
    107107}
     
    181181#endif
    182182
    183 void FormData::appendKeyValuePairItems(const FormDataList& list, const TextEncoding& encoding, bool isMultiPartForm, Document* document)
     183void FormData::appendKeyValuePairItems(const FormDataList& list, const TextEncoding& encoding, bool isMultiPartForm, Document* document, EncodingType encodingType)
    184184{
    185185    if (isMultiPartForm)
     
    264264                FormDataBuilder::encodeStringAsFormData(encodedData, value.data());
    265265            else
    266                 FormDataBuilder::addKeyValuePairAsFormData(encodedData, key.data(), value.data());
     266                FormDataBuilder::addKeyValuePairAsFormData(encodedData, key.data(), value.data(), encodingType);
    267267        }
    268268    }
  • trunk/Source/WebCore/platform/network/FormData.h

    r75020 r98896  
    9292class FormData : public RefCounted<FormData> {
    9393public:
     94    enum EncodingType {
     95        FormURLEncoded, // for application/x-www-form-urlencoded
     96        TextPlain, // for text/plain
     97        MultipartFormData // for multipart/form-data
     98    };
     99
    94100    static PassRefPtr<FormData> create();
    95101    static PassRefPtr<FormData> create(const void*, size_t);
    96102    static PassRefPtr<FormData> create(const CString&);
    97103    static PassRefPtr<FormData> create(const Vector<char>&);
    98     static PassRefPtr<FormData> create(const FormDataList&, const TextEncoding&);
     104    static PassRefPtr<FormData> create(const FormDataList&, const TextEncoding&, EncodingType = FormURLEncoded);
    99105    static PassRefPtr<FormData> createMultiPart(const FormDataList&, const TextEncoding&, Document*);
    100106    PassRefPtr<FormData> copy() const;
     
    130136    int64_t identifier() const { return m_identifier; }
    131137
     138    static EncodingType parseEncodingType(const String& type)
     139    {
     140        if (equalIgnoringCase(type, "text/plain"))
     141            return TextPlain;
     142        if (equalIgnoringCase(type, "multipart/form-data"))
     143            return MultipartFormData;
     144        return FormURLEncoded;
     145    }
     146
    132147private:
    133148    FormData();
    134149    FormData(const FormData&);
    135150
    136     void appendKeyValuePairItems(const FormDataList&, const TextEncoding&, bool isMultiPartForm, Document*);
     151    void appendKeyValuePairItems(const FormDataList&, const TextEncoding&, bool isMultiPartForm, Document*, EncodingType = FormURLEncoded);
    137152
    138153    Vector<FormDataElement> m_elements;
  • trunk/Source/WebCore/platform/network/FormDataBuilder.cpp

    r95901 r98896  
    182182}
    183183
    184 void FormDataBuilder::addKeyValuePairAsFormData(Vector<char>& buffer, const CString& key, const CString& value)
    185 {
    186     if (!buffer.isEmpty())
    187         append(buffer, '&');
    188 
    189     encodeStringAsFormData(buffer, key);
    190     append(buffer, '=');
    191     encodeStringAsFormData(buffer, value);
     184void FormDataBuilder::addKeyValuePairAsFormData(Vector<char>& buffer, const CString& key, const CString& value, FormData::EncodingType encodingType)
     185{
     186    if (encodingType == FormData::TextPlain) {
     187        if (!buffer.isEmpty())
     188            append(buffer, "\r\n");
     189        append(buffer, key);
     190        append(buffer, '=');
     191        append(buffer, value);
     192    } else {
     193        if (!buffer.isEmpty())
     194            append(buffer, '&');
     195        encodeStringAsFormData(buffer, key);
     196        append(buffer, '=');
     197        encodeStringAsFormData(buffer, value);
     198    }
    192199}
    193200
  • trunk/Source/WebCore/platform/network/FormDataBuilder.h

    r95901 r98896  
    2222#define FormDataBuilder_h
    2323
     24#include "FormData.h"
    2425#include "PlatformString.h"
    2526#include <wtf/Forward.h>
     
    4445
    4546    // Helper functions used by HTMLFormElement for non multi-part form data
    46     static void addKeyValuePairAsFormData(Vector<char>&, const CString& key, const CString& value);
     47    static void addKeyValuePairAsFormData(Vector<char>&, const CString& key, const CString& value, FormData::EncodingType = FormData::FormURLEncoded);
    4748    static void encodeStringAsFormData(Vector<char>&, const CString&);
    4849
Note: See TracChangeset for help on using the changeset viewer.