1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version.
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful,
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details.
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA.
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h"
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML)
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLGoElement.h"
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
26e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "Attribute.h"
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FormData.h"
28dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "FormDataBuilder.h"
290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "FormSubmission.h"
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Frame.h"
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FrameLoader.h"
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "HTMLNames.h"
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ResourceRequest.h"
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "TextEncoding.h"
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLCardElement.h"
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLDocument.h"
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLNames.h"
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPageState.h"
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPostfieldElement.h"
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLTimerElement.h"
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLVariables.h"
42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h>
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore {
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WMLNames;
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLGoElement::WMLGoElement(const QualifiedName& tagName, Document* doc)
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    : WMLTaskElement(tagName, doc)
50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenPassRefPtr<WMLGoElement> WMLGoElement::create(const QualifiedName& tagName, Document* document)
545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{
555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    return adoptRef(new WMLGoElement(tagName, document));
565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen}
575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLGoElement::registerPostfieldElement(WMLPostfieldElement* postfield)
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(m_postfieldElements.find(postfield) == WTF::notFound);
61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    m_postfieldElements.append(postfield);
62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WMLGoElement::deregisterPostfieldElement(WMLPostfieldElement* postfield)
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    size_t position = m_postfieldElements.find(postfield);
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(position != WTF::notFound);
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_postfieldElements.remove(position);
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
71e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WMLGoElement::parseMappedAttribute(Attribute* attr)
72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (attr->name() == HTMLNames::methodAttr)
740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        m_formAttributes.parseMethodType(attr->value());
75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else if (attr->name() == HTMLNames::enctypeAttr)
760617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        m_formAttributes.parseEncodingType(parseValueSubstitutingVariableReferences(attr->value()));
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else if (attr->name() == HTMLNames::accept_charsetAttr)
780617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        m_formAttributes.setAcceptCharset(parseValueForbiddingVariableReferences(attr->value()));
79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else
80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        WMLTaskElement::parseMappedAttribute(attr);
81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid WMLGoElement::executeTask()
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ASSERT(document()->isWMLDocument());
86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WMLDocument* document = static_cast<WMLDocument*>(this->document());
87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WMLPageState* pageState = wmlPageStateForDocument(document);
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!pageState)
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WMLCardElement* card = document->activeCard();
93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!card)
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    Frame* frame = document->frame();
97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!frame)
98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    FrameLoader* loader = frame->loader();
101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!loader)
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    String href = getAttribute(HTMLNames::hrefAttr);
105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (href.isEmpty())
106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Substitute variables within target url attribute value
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    KURL url = document->completeURL(substituteVariableReferences(href, document, WMLVariableEscapingEscape));
110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (url.isEmpty())
111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    storeVariableState(pageState);
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Stop the timer of the current card if it is active
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (WMLTimerElement* eventTimer = card->eventTimer())
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        eventTimer->stop();
118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // FIXME: 'newcontext' handling not implemented for external cards
120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    bool inSameDeck = document->url().path() == url.path();
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (inSameDeck && url.hasFragmentIdentifier()) {
122231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (WMLCardElement* card = WMLCardElement::findNamedCardInDocument(document, url.fragmentIdentifier())) {
123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            if (card->isNewContext())
124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                pageState->reset();
125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Prepare loading the destination url
129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    ResourceRequest request(url);
130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (getAttribute(sendrefererAttr) == "true")
132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        request.setHTTPReferrer(loader->outgoingReferrer());
133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    String cacheControl = getAttribute(cache_controlAttr);
135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (m_formAttributes.method() == FormSubmission::PostMethod)
137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        preparePOSTRequest(request, inSameDeck, cacheControl);
138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        prepareGETRequest(request, url);
140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Set HTTP cache-control header if needed
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!cacheControl.isEmpty()) {
143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        request.setHTTPHeaderField("cache-control", cacheControl);
144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (cacheControl == "no-cache")
146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            request.setCachePolicy(ReloadIgnoringCacheData);
147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    loader->load(request, false);
150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLGoElement::preparePOSTRequest(ResourceRequest& request, bool inSameDeck, const String& cacheControl)
153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    request.setHTTPMethod("POST");
155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (inSameDeck && cacheControl != "no-cache") {
157635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        request.setCachePolicy(ReturnCacheDataDontLoad);
158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
159635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<FormData> data;
162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (m_formAttributes.isMultiPartForm()) { // multipart/form-data
1640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        Vector<char> boundary = FormDataBuilder::generateUniqueBoundaryString();
165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        data = createFormData(boundary.data());
1660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        request.setHTTPContentType(m_formAttributes.encodingType() + "; boundary=" + boundary.data());
167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    } else {
168635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        // text/plain or application/x-www-form-urlencoded
169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        data = createFormData(CString());
1700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        request.setHTTPContentType(m_formAttributes.encodingType());
171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
173635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    request.setHTTPBody(data.get());
174635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
175635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLGoElement::prepareGETRequest(ResourceRequest& request, const KURL& url)
177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
178635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    request.setHTTPMethod("GET");
179635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Eventually display error message?
1810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (m_formAttributes.isMultiPartForm())
182635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
183635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<FormData> data = createFormData(CString());
185635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
186635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    KURL remoteURL(url);
187635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    remoteURL.setQuery(data->flattenToString());
188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    request.setURL(remoteURL);
189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
191635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectPassRefPtr<FormData> WMLGoElement::createFormData(const CString& boundary)
192635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
193635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    CString key;
194635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    CString value;
195635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Vector<char> encodedData;
1970617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    TextEncoding encoding = FormDataBuilder::encodingFromAcceptCharset(m_formAttributes.acceptCharset(), document()).encodingForFormSubmission();
198635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
199635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Vector<WMLPostfieldElement*>::iterator it = m_postfieldElements.begin();
200635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Vector<WMLPostfieldElement*>::iterator end = m_postfieldElements.end();
201635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
202635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<FormData> result = FormData::create();
203635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    for (; it != end; ++it) {
204635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        (*it)->encodeData(encoding, key, value);
205635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2060617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        if (m_formAttributes.isMultiPartForm()) {
207635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            Vector<char> header;
2080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            FormDataBuilder::beginMultiPartHeader(header, boundary, key);
2090617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            FormDataBuilder::finishMultiPartHeader(header);
210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            result->appendData(header.data(), header.size());
211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            if (size_t dataSize = value.length())
213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                result->appendData(value.data(), dataSize);
214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            result->appendData("\r\n", 2);
216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        } else
2170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen            FormDataBuilder::addKeyValuePairAsFormData(encodedData, key, value);
218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (m_formAttributes.isMultiPartForm())
2210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        FormDataBuilder::addBoundaryToMultiPartHeader(encodedData, boundary, true);
222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    result->appendData(encodedData.data(), encodedData.size());
224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return result;
225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
227635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
230