OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2006, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 for (size_t i = 0; i < n; ++i) { | 107 for (size_t i = 0; i < n; ++i) { |
108 const FormDataElement& e = m_elements[i]; | 108 const FormDataElement& e = m_elements[i]; |
109 switch (e.m_type) { | 109 switch (e.m_type) { |
110 case FormDataElement::data: | 110 case FormDataElement::data: |
111 formData->m_elements.uncheckedAppend(FormDataElement(e.m_data)); | 111 formData->m_elements.uncheckedAppend(FormDataElement(e.m_data)); |
112 break; | 112 break; |
113 case FormDataElement::encodedFile: | 113 case FormDataElement::encodedFile: |
114 formData->m_elements.uncheckedAppend(FormDataElement(e.m_filename, e
.m_fileStart, e.m_fileLength, e.m_expectedFileModificationTime)); | 114 formData->m_elements.uncheckedAppend(FormDataElement(e.m_filename, e
.m_fileStart, e.m_fileLength, e.m_expectedFileModificationTime)); |
115 break; | 115 break; |
116 case FormDataElement::encodedBlob: | 116 case FormDataElement::encodedBlob: |
117 formData->m_elements.uncheckedAppend(FormDataElement(e.m_url)); | 117 formData->m_elements.uncheckedAppend(FormDataElement(e.m_blobUUID, e
.m_optionalBlobDataHandle)); |
118 break; | 118 break; |
119 case FormDataElement::encodedURL: | 119 case FormDataElement::encodedFileSystemURL: |
120 formData->m_elements.uncheckedAppend(FormDataElement(e.m_url, e.m_fi
leStart, e.m_fileLength, e.m_expectedFileModificationTime)); | 120 formData->m_elements.uncheckedAppend(FormDataElement(e.m_fileSystemU
RL, e.m_fileStart, e.m_fileLength, e.m_expectedFileModificationTime)); |
121 break; | 121 break; |
122 } | 122 } |
123 } | 123 } |
124 return formData.release(); | 124 return formData.release(); |
125 } | 125 } |
126 | 126 |
127 void FormData::appendData(const void* data, size_t size) | 127 void FormData::appendData(const void* data, size_t size) |
128 { | 128 { |
129 if (m_elements.isEmpty() || m_elements.last().m_type != FormDataElement::dat
a) | 129 if (m_elements.isEmpty() || m_elements.last().m_type != FormDataElement::dat
a) |
130 m_elements.append(FormDataElement()); | 130 m_elements.append(FormDataElement()); |
131 FormDataElement& e = m_elements.last(); | 131 FormDataElement& e = m_elements.last(); |
132 size_t oldSize = e.m_data.size(); | 132 size_t oldSize = e.m_data.size(); |
133 e.m_data.grow(oldSize + size); | 133 e.m_data.grow(oldSize + size); |
134 memcpy(e.m_data.data() + oldSize, data, size); | 134 memcpy(e.m_data.data() + oldSize, data, size); |
135 } | 135 } |
136 | 136 |
137 void FormData::appendFile(const String& filename) | 137 void FormData::appendFile(const String& filename) |
138 { | 138 { |
139 m_elements.append(FormDataElement(filename, 0, BlobDataItem::toEndOfFile, in
validFileTime())); | 139 m_elements.append(FormDataElement(filename, 0, BlobDataItem::toEndOfFile, in
validFileTime())); |
140 } | 140 } |
141 | 141 |
142 void FormData::appendFileRange(const String& filename, long long start, long lon
g length, double expectedModificationTime) | 142 void FormData::appendFileRange(const String& filename, long long start, long lon
g length, double expectedModificationTime) |
143 { | 143 { |
144 m_elements.append(FormDataElement(filename, start, length, expectedModificat
ionTime)); | 144 m_elements.append(FormDataElement(filename, start, length, expectedModificat
ionTime)); |
145 } | 145 } |
146 | 146 |
147 void FormData::appendBlob(const KURL& blobURL) | 147 void FormData::appendBlob(const String& uuid, PassRefPtr<BlobDataHandle> optiona
lHandle) |
148 { | 148 { |
149 m_elements.append(FormDataElement(blobURL)); | 149 m_elements.append(FormDataElement(uuid, optionalHandle)); |
150 } | 150 } |
151 | 151 |
152 void FormData::appendURL(const KURL& url) | 152 void FormData::appendFileSystemURL(const KURL& url) |
153 { | 153 { |
154 m_elements.append(FormDataElement(url, 0, BlobDataItem::toEndOfFile, invalid
FileTime())); | 154 m_elements.append(FormDataElement(url, 0, BlobDataItem::toEndOfFile, invalid
FileTime())); |
155 } | 155 } |
156 | 156 |
157 void FormData::appendURLRange(const KURL& url, long long start, long long length
, double expectedModificationTime) | 157 void FormData::appendFileSystemURLRange(const KURL& url, long long start, long l
ong length, double expectedModificationTime) |
158 { | 158 { |
159 m_elements.append(FormDataElement(url, start, length, expectedModificationTi
me)); | 159 m_elements.append(FormDataElement(url, start, length, expectedModificationTi
me)); |
160 } | 160 } |
161 | 161 |
162 void FormData::appendKeyValuePairItems(const FormDataList& list, const WTF::Text
Encoding& encoding, bool isMultiPartForm, EncodingType encodingType) | 162 void FormData::appendKeyValuePairItems(const FormDataList& list, const WTF::Text
Encoding& encoding, bool isMultiPartForm, EncodingType encodingType) |
163 { | 163 { |
164 if (isMultiPartForm) | 164 if (isMultiPartForm) |
165 m_boundary = FormDataBuilder::generateUniqueBoundaryString(); | 165 m_boundary = FormDataBuilder::generateUniqueBoundaryString(); |
166 | 166 |
167 Vector<char> encodedData; | 167 Vector<char> encodedData; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 | 211 |
212 // Append body | 212 // Append body |
213 appendData(header.data(), header.size()); | 213 appendData(header.data(), header.size()); |
214 if (value.blob()) { | 214 if (value.blob()) { |
215 if (value.blob()->isFile()) { | 215 if (value.blob()->isFile()) { |
216 File* file = toFile(value.blob()); | 216 File* file = toFile(value.blob()); |
217 // Do not add the file if the path is empty. | 217 // Do not add the file if the path is empty. |
218 if (!file->path().isEmpty()) | 218 if (!file->path().isEmpty()) |
219 appendFile(file->path()); | 219 appendFile(file->path()); |
220 if (!file->fileSystemURL().isEmpty()) | 220 if (!file->fileSystemURL().isEmpty()) |
221 appendURL(file->fileSystemURL()); | 221 appendFileSystemURL(file->fileSystemURL()); |
| 222 } else { |
| 223 appendBlob(value.blob()->uuid(), value.blob()->blobDataHandl
e()); |
222 } | 224 } |
223 else | |
224 appendBlob(value.blob()->url()); | |
225 } else | 225 } else |
226 appendData(value.data().data(), value.data().length()); | 226 appendData(value.data().data(), value.data().length()); |
227 appendData("\r\n", 2); | 227 appendData("\r\n", 2); |
228 } else { | 228 } else { |
229 // Omit the name "isindex" if it's the first form data element. | 229 // Omit the name "isindex" if it's the first form data element. |
230 // FIXME: Why is this a good rule? Is this obsolete now? | 230 // FIXME: Why is this a good rule? Is this obsolete now? |
231 if (encodedData.isEmpty() && key.data() == "isindex") | 231 if (encodedData.isEmpty() && key.data() == "isindex") |
232 FormDataBuilder::encodeStringAsFormData(encodedData, value.data(
)); | 232 FormDataBuilder::encodeStringAsFormData(encodedData, value.data(
)); |
233 else | 233 else |
234 FormDataBuilder::addKeyValuePairAsFormData(encodedData, key.data
(), value.data(), encodingType); | 234 FormDataBuilder::addKeyValuePairAsFormData(encodedData, key.data
(), value.data(), encodingType); |
(...skipping 19 matching lines...) Expand all Loading... |
254 } | 254 } |
255 | 255 |
256 String FormData::flattenToString() const | 256 String FormData::flattenToString() const |
257 { | 257 { |
258 Vector<char> bytes; | 258 Vector<char> bytes; |
259 flatten(bytes); | 259 flatten(bytes); |
260 return Latin1Encoding().decode(reinterpret_cast<const char*>(bytes.data()),
bytes.size()); | 260 return Latin1Encoding().decode(reinterpret_cast<const char*>(bytes.data()),
bytes.size()); |
261 } | 261 } |
262 | 262 |
263 } // namespace WebCore | 263 } // namespace WebCore |
OLD | NEW |