Changeset 61511 in webkit


Ignore:
Timestamp:
Jun 20, 2010 2:00:35 PM (14 years ago)
Author:
Dimitri Glazkov
Message:

2010-06-14 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Darin Adler.

Introduce FormSubmission, the structure representing a form submission.
https://bugs.webkit.org/show_bug.cgi?id=40084

No change in functionality, covered by existing tests.

  • GNUmakefile.am: Added FormSubmission.h/cpp.
  • WebCore.gypi: Ditto.
  • WebCore.pro: Ditto.
  • WebCore.vcproj/WebCore.vcproj: Ditto.
  • WebCore.xcodeproj/project.pbxproj: Ditto.
  • html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::prepareFormSubmission): Renamed prepareFormData to prepareFormSubmission,

added code for populating a FormSubmission instance, moved the loop of accumulating text input
values into this functions (it belongs here logically).

(WebCore::HTMLFormElement::submit): Modified to use prepareFormSubmission.

  • html/HTMLFormElement.h:
  • loader/FormSubmission.cpp: Added.
  • loader/FormSubmission.h: Added.
  • loader/FrameLoader.cpp: (WebCore::FrameLoader::submitForm): Modified to use FormSubmission. Stopped plumbing further to keep

the patch size down.

  • loader/FrameLoader.h: Modified submitForm signature.
Location:
trunk/WebCore
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/Android.mk

    r61366 r61511  
    300300        loader/DocumentWriter.cpp \
    301301        loader/FormState.cpp \
     302        loader/FormSubmission.cpp \
    302303        loader/FrameLoader.cpp \
    303304        loader/HistoryController.cpp \
  • trunk/WebCore/ChangeLog

    r61507 r61511  
     12010-06-14  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Introduce FormSubmission, the structure representing a form submission.
     6        https://bugs.webkit.org/show_bug.cgi?id=40084
     7
     8        No change in functionality, covered by existing tests.
     9
     10        * GNUmakefile.am: Added FormSubmission.h/cpp.
     11        * WebCore.gypi: Ditto.
     12        * WebCore.pro: Ditto.
     13        * WebCore.vcproj/WebCore.vcproj: Ditto.
     14        * WebCore.xcodeproj/project.pbxproj: Ditto.
     15        * html/HTMLFormElement.cpp:
     16        (WebCore::HTMLFormElement::prepareFormSubmission): Renamed prepareFormData to prepareFormSubmission,
     17            added code for populating a FormSubmission instance, moved the loop of accumulating text input
     18            values into this functions (it belongs here logically).
     19        (WebCore::HTMLFormElement::submit): Modified to use prepareFormSubmission.
     20        * html/HTMLFormElement.h:
     21        * loader/FormSubmission.cpp: Added.
     22        * loader/FormSubmission.h: Added.
     23        * loader/FrameLoader.cpp:
     24        (WebCore::FrameLoader::submitForm): Modified to use FormSubmission. Stopped plumbing further to keep
     25            the patch size down.
     26        * loader/FrameLoader.h: Modified submitForm signature.
     27
    1282010-06-20  Joseph Pecoraro  <joepeck@webkit.org>
    229
  • trunk/WebCore/GNUmakefile.am

    r61414 r61511  
    13881388        WebCore/loader/FormState.cpp \
    13891389        WebCore/loader/FormState.h \
     1390        WebCore/loader/FormSubmission.cpp \
     1391        WebCore/loader/FormSubmission.h \
    13901392        WebCore/loader/FrameLoader.cpp \
    13911393        WebCore/loader/FrameLoader.h \
  • trunk/WebCore/WebCore.gypi

    r61414 r61511  
    17931793            'loader/FormState.cpp',
    17941794            'loader/FormState.h',
     1795            'loader/FormSubmission.cpp',
     1796            'loader/FormSubmission.h',
    17951797            'loader/FrameLoader.cpp',
    17961798            'loader/FrameLoader.h',
  • trunk/WebCore/WebCore.pro

    r61478 r61511  
    743743    loader/DocumentWriter.cpp \
    744744    loader/FormState.cpp \
     745    loader/FormSubmission.cpp \
    745746    loader/FrameLoader.cpp \
    746747    loader/HistoryController.cpp \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r61414 r61511  
    2195421954                        </File>
    2195521955                        <File
     21956                                RelativePath="..\loader\FormSubmission.cpp"
     21957                                >
     21958                        </File>
     21959                        <File
     21960                                RelativePath="..\loader\FormSubmission.h"
     21961                                >
     21962                        </File>
     21963                        <File
    2195621964                                RelativePath="..\loader\FrameLoader.cpp"
    2195721965                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r61444 r61511  
    783783                416E75CC0EDF90C700360E1D /* ScriptCallFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 416E75CA0EDF90C700360E1D /* ScriptCallFrame.cpp */; };
    784784                416F45F00ED7B311008215B6 /* ScriptString.h in Headers */ = {isa = PBXBuildFile; fileRef = 416F45EF0ED7B311008215B6 /* ScriptString.h */; settings = {ATTRIBUTES = (Private, ); }; };
     785                41885B9311B6FDA6003383BB /* FormSubmission.h in Headers */ = {isa = PBXBuildFile; fileRef = 41885B9111B6FDA6003383BB /* FormSubmission.h */; };
     786                41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41885B9211B6FDA6003383BB /* FormSubmission.cpp */; };
    785787                418F88040FF957AE0080F045 /* JSAbstractWorker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 418F88020FF957AE0080F045 /* JSAbstractWorker.cpp */; };
    786788                418F88050FF957AF0080F045 /* JSAbstractWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 418F88030FF957AE0080F045 /* JSAbstractWorker.h */; };
     
    63596361                416E75CA0EDF90C700360E1D /* ScriptCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptCallFrame.cpp; sourceTree = "<group>"; };
    63606362                416F45EF0ED7B311008215B6 /* ScriptString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptString.h; sourceTree = "<group>"; };
     6363                41885B9111B6FDA6003383BB /* FormSubmission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormSubmission.h; sourceTree = "<group>"; };
     6364                41885B9211B6FDA6003383BB /* FormSubmission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormSubmission.cpp; sourceTree = "<group>"; };
    63616365                418F88020FF957AE0080F045 /* JSAbstractWorker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAbstractWorker.cpp; sourceTree = "<group>"; };
    63626366                418F88030FF957AE0080F045 /* JSAbstractWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAbstractWorker.h; sourceTree = "<group>"; };
     
    1574315747                                656D37230ADBA5DE00A4554D /* FormState.cpp */,
    1574415748                                656D37220ADBA5DE00A4554D /* FormState.h */,
     15749                                41885B9111B6FDA6003383BB /* FormSubmission.h */,
     15750                                41885B9211B6FDA6003383BB /* FormSubmission.cpp */,
    1574515751                                932E16080AF578340025F408 /* FrameLoader.cpp */,
    1574615752                                656D37240ADBA5DE00A4554D /* FrameLoader.h */,
     
    1794317949                                514C764E0CE9234E007EF3CD /* FormDataStreamMac.h in Headers */,
    1794417950                                656D373A0ADBA5DE00A4554D /* FormState.h in Headers */,
     17951                                41885B9311B6FDA6003383BB /* FormSubmission.h in Headers */,
    1794517952                                935C476D09AC4D6300A6AAB4 /* FoundationExtras.h in Headers */,
    1794617953                                65BF022F0974816300C43196 /* Frame.h in Headers */,
     
    2028620293                                514C764F0CE9234E007EF3CD /* FormDataStreamMac.mm in Sources */,
    2028720294                                656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */,
     20295                                41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */,
    2028820296                                65BF022E0974816300C43196 /* Frame.cpp in Sources */,
    2028920297                                932E16090AF578340025F408 /* FrameLoader.cpp in Sources */,
  • trunk/WebCore/html/HTMLFormElement.cpp

    r61360 r61511  
    3838#include "FormDataList.h"
    3939#include "FormState.h"
     40#include "FormSubmission.h"
    4041#include "Frame.h"
    4142#include "FrameLoader.h"
     
    222223}
    223224
    224 PassRefPtr<FormData> HTMLFormElement::prepareFormData()
     225PassRefPtr<FormSubmission> HTMLFormElement::prepareFormSubmission(Event* event, bool lockHistory, FormSubmissionTrigger trigger)
    225226{
    226227    if (m_formDataBuilder.isPostMethod()) {
     
    234235
    235236    RefPtr<DOMFormData> domFormData = DOMFormData::create(dataEncoding().encodingForFormSubmission());
     237    Vector<pair<String, String> > formValues;
     238
    236239    for (unsigned i = 0; i < m_associatedElements.size(); ++i) {
    237240        HTMLFormControlElement* control = m_associatedElements[i];
    238241        if (!control->disabled())
    239242            control->appendFormData(*domFormData, m_formDataBuilder.isMultiPartForm());
    240     }
    241 
    242     RefPtr<FormData> result;
    243 
    244     if (m_formDataBuilder.isMultiPartForm())
    245         result = FormData::createMultiPart(domFormData->items(), domFormData->encoding(), document());
    246     else {
    247         result = FormData::create(domFormData->items(), domFormData->encoding());
     243        if (control->hasLocalName(inputTag)) {
     244            HTMLInputElement* input = static_cast<HTMLInputElement*>(control);
     245            if (input->isTextField()) {
     246                formValues.append(pair<String, String>(input->name(), input->value()));
     247                if (input->isSearchField())
     248                    input->addSearchResult();
     249            }
     250        }
     251    }
     252
     253    RefPtr<FormData> formData;
     254    String boundary;
     255
     256    if (m_formDataBuilder.isMultiPartForm()) {
     257        formData = FormData::createMultiPart(domFormData->items(), domFormData->encoding(), document());
     258        boundary = formData->boundary().data();
     259    } else {
     260        formData = FormData::create(domFormData->items(), domFormData->encoding());
    248261        if (m_formDataBuilder.isPostMethod() && isMailtoForm()) {
    249262            // Convert the form data into a string that we put into the URL.
    250263            KURL url = document()->completeURL(m_url);
    251             appendMailtoPostFormDataToURL(url, *result, m_formDataBuilder.encodingType());
     264            appendMailtoPostFormDataToURL(url, *formData, m_formDataBuilder.encodingType());
    252265            m_url = url.string();
    253266
    254             result = FormData::create();
    255         }
    256     }
    257 
    258     result->setIdentifier(generateFormDataIdentifier());
    259     return result.release();
     267            formData = FormData::create();
     268        }
     269    }
     270
     271    formData->setIdentifier(generateFormDataIdentifier());
     272    FormSubmission::Method method = m_formDataBuilder.isPostMethod() ? FormSubmission::PostMethod : FormSubmission::GetMethod;
     273    return FormSubmission::create(method, m_url, m_target, m_formDataBuilder.encodingType(), FormState::create(this, formValues, document()->frame(), trigger), formData.release(), boundary, lockHistory, event);
    260274}
    261275
     
    374388    bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button?
    375389   
    376     Vector<pair<String, String> > formValues;
    377 
    378390    for (unsigned i = 0; i < m_associatedElements.size(); ++i) {
    379391        HTMLFormControlElement* control = m_associatedElements[i];
    380         if (control->hasLocalName(inputTag)) {
    381             HTMLInputElement* input = static_cast<HTMLInputElement*>(control);
    382             if (input->isTextField()) {
    383                 formValues.append(pair<String, String>(input->name(), input->value()));
    384                 if (input->isSearchField())
    385                     input->addSearchResult();
    386             }
    387         }
    388392        if (needButtonActivation) {
    389393            if (control->isActivatedSubmit())
     
    394398    }
    395399
    396     RefPtr<FormState> formState = FormState::create(this, formValues, frame, formSubmissionTrigger);
    397 
    398400    if (needButtonActivation && firstSuccessfulSubmitButton)
    399401        firstSuccessfulSubmitButton->setActivatedSubmit(true);
     
    402404        m_url = document()->url().string();
    403405
    404     RefPtr<FormData> data = prepareFormData();
    405     String boundary = m_formDataBuilder.isMultiPartForm() ? data->boundary().data() : String();
    406     const char* method = m_formDataBuilder.isPostMethod() ? "POST" : "GET";
    407     frame->loader()->submitForm(method, m_url, data.release(), m_target, m_formDataBuilder.encodingType(), boundary, lockHistory, event, formState.release());
     406    frame->loader()->submitForm(prepareFormSubmission(event, lockHistory, formSubmissionTrigger));
    408407
    409408    if (needButtonActivation && firstSuccessfulSubmitButton)
  • trunk/WebCore/html/HTMLFormElement.h

    r61152 r61511  
    3535class Event;
    3636class FormData;
     37class FormSubmission;
    3738class HTMLFormControlElement;
    3839class HTMLImageElement;
     
    138139    bool isMailtoForm() const;
    139140    TextEncoding dataEncoding() const;
    140     PassRefPtr<FormData> prepareFormData();
     141    PassRefPtr<FormSubmission> prepareFormSubmission(Event*, bool lockHistory, FormSubmissionTrigger);
    141142    unsigned formElementIndex(HTMLFormControlElement*);
    142143    // Returns true if the submission should be proceeded.
  • trunk/WebCore/loader/FrameLoader.cpp

    r61230 r61511  
    5454#include "FloatRect.h"
    5555#include "FormState.h"
     56#include "FormSubmission.h"
    5657#include "Frame.h"
    5758#include "FrameLoadRequest.h"
     
    461462}
    462463
    463 void FrameLoader::submitForm(const char* action, const String& url, PassRefPtr<FormData> formData,
    464     const String& target, const String& contentType, const String& boundary,
    465     bool lockHistory, PassRefPtr<Event> event, PassRefPtr<FormState> formState)
    466 {
     464void FrameLoader::submitForm(PassRefPtr<FormSubmission> submission)
     465{
     466    // FIXME: Plumb this further in.
     467    const char* action = submission->method() == FormSubmission::PostMethod ? "POST" : "GET";
     468    RefPtr<FormData> formData = submission->data();
     469    RefPtr<FormState> formState = submission->state();
     470    String url = submission->action();
     471    String target = submission->target();
     472    String boundary = submission->boundary();
     473    String contentType = submission->contentType();
     474    bool lockHistory = submission->lockHistory();
     475    RefPtr<Event> event = submission->event();
     476
    467477    ASSERT(action);
    468478    ASSERT(strcmp(action, "GET") == 0 || strcmp(action, "POST") == 0);
  • trunk/WebCore/loader/FrameLoader.h

    r60813 r61511  
    5858class FormData;
    5959class FormState;
     60class FormSubmission;
    6061class Frame;
    6162class FrameLoaderClient;
     
    225226    bool requestFrame(HTMLFrameOwnerElement*, const String& url, const AtomicString& frameName, bool lockHistory = true, bool lockBackForwardList = true);
    226227
    227     void submitForm(const char* action, const String& url,
    228         PassRefPtr<FormData>, const String& target, const String& contentType, const String& boundary,
    229         bool lockHistory, PassRefPtr<Event>, PassRefPtr<FormState>);
     228    void submitForm(PassRefPtr<FormSubmission>);
    230229
    231230    void stop();
Note: See TracChangeset for help on using the changeset viewer.