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