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 * |
11 * This library is distributed in the hope that it will be useful, | 11 * This library is distributed in the hope that it will be useful, |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 * Library General Public License for more details. | 14 * Library General Public License for more details. |
15 * | 15 * |
16 * You should have received a copy of the GNU Library General Public License | 16 * You should have received a copy of the GNU Library General Public License |
17 * along with this library; see the file COPYING.LIB. If not, write to | 17 * along with this library; see the file COPYING.LIB. If not, write to |
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 * Boston, MA 02110-1301, USA. | 19 * Boston, MA 02110-1301, USA. |
20 */ | 20 */ |
21 | 21 |
22 #include "config.h" | 22 #include "config.h" |
23 | 23 |
24 #include "FormData.h" | 24 #include "FormData.h" |
25 | 25 |
26 #include "BlobData.h" | |
27 #include "BlobRegistryImpl.h" | |
28 #include "BlobURL.h" | |
29 #include "Chrome.h" | 26 #include "Chrome.h" |
30 #include "ChromeClient.h" | 27 #include "ChromeClient.h" |
31 #include "Document.h" | 28 #include "Document.h" |
32 #include "File.h" | 29 #include "File.h" |
33 #include "FileSystem.h" | 30 #include "FileSystem.h" |
34 #include "FormDataBuilder.h" | 31 #include "FormDataBuilder.h" |
35 #include "FormDataList.h" | 32 #include "FormDataList.h" |
36 #include "MIMETypeRegistry.h" | 33 #include "MIMETypeRegistry.h" |
37 #include "Page.h" | 34 #include "Page.h" |
38 #include "PlatformMemoryInstrumentation.h" | 35 #include "PlatformMemoryInstrumentation.h" |
39 #include "TextEncoding.h" | 36 #include "TextEncoding.h" |
40 #include <wtf/Decoder.h> | 37 #include <wtf/Decoder.h> |
41 #include <wtf/Encoder.h> | 38 #include <wtf/Encoder.h> |
42 #include <wtf/MemoryInstrumentationVector.h> | 39 #include <wtf/MemoryInstrumentationVector.h> |
43 | 40 |
| 41 #if PLATFORM(CHROMIUM) |
| 42 // Chromium doesn't store blob data in renderer processes. |
| 43 #else |
| 44 #include "BlobRegistryImpl.h" |
| 45 #endif |
| 46 |
44 namespace WebCore { | 47 namespace WebCore { |
45 | 48 |
46 inline FormData::FormData() | 49 inline FormData::FormData() |
47 : m_identifier(0) | 50 : m_identifier(0) |
48 , m_hasGeneratedFiles(false) | 51 , m_hasGeneratedFiles(false) |
49 , m_alwaysStream(false) | 52 , m_alwaysStream(false) |
50 , m_containsPasswordData(false) | 53 , m_containsPasswordData(false) |
51 { | 54 { |
52 } | 55 } |
53 | 56 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 break; | 143 break; |
141 case FormDataElement::encodedFile: | 144 case FormDataElement::encodedFile: |
142 #if ENABLE(BLOB) | 145 #if ENABLE(BLOB) |
143 formData->m_elements.append(FormDataElement(e.m_filename, e.m_fileSt
art, e.m_fileLength, e.m_expectedFileModificationTime, e.m_shouldGenerateFile)); | 146 formData->m_elements.append(FormDataElement(e.m_filename, e.m_fileSt
art, e.m_fileLength, e.m_expectedFileModificationTime, e.m_shouldGenerateFile)); |
144 #else | 147 #else |
145 formData->m_elements.append(FormDataElement(e.m_filename, e.m_should
GenerateFile)); | 148 formData->m_elements.append(FormDataElement(e.m_filename, e.m_should
GenerateFile)); |
146 #endif | 149 #endif |
147 break; | 150 break; |
148 #if ENABLE(BLOB) | 151 #if ENABLE(BLOB) |
149 case FormDataElement::encodedBlob: | 152 case FormDataElement::encodedBlob: |
150 formData->m_elements.append(FormDataElement(e.m_url)); | 153 formData->m_elements.append(FormDataElement(e.m_blobUUID, e.m_option
alBlobDataHandle)); |
151 break; | 154 break; |
152 #endif | 155 #endif |
153 #if ENABLE(FILE_SYSTEM) | 156 #if ENABLE(FILE_SYSTEM) |
154 case FormDataElement::encodedURL: | 157 case FormDataElement::encodedFileSystemURL: |
155 formData->m_elements.append(FormDataElement(e.m_url, e.m_fileStart,
e.m_fileLength, e.m_expectedFileModificationTime)); | 158 formData->m_elements.append(FormDataElement(e.m_fileSystemURL, e.m_f
ileStart, e.m_fileLength, e.m_expectedFileModificationTime)); |
156 break; | 159 break; |
157 #endif | 160 #endif |
158 } | 161 } |
159 } | 162 } |
160 return formData.release(); | 163 return formData.release(); |
161 } | 164 } |
162 | 165 |
163 void FormData::appendData(const void* data, size_t size) | 166 void FormData::appendData(const void* data, size_t size) |
164 { | 167 { |
165 if (m_elements.isEmpty() || m_elements.last().m_type != FormDataElement::dat
a) | 168 if (m_elements.isEmpty() || m_elements.last().m_type != FormDataElement::dat
a) |
(...skipping 12 matching lines...) Expand all Loading... |
178 m_elements.append(FormDataElement(filename, shouldGenerateFile)); | 181 m_elements.append(FormDataElement(filename, shouldGenerateFile)); |
179 #endif | 182 #endif |
180 } | 183 } |
181 | 184 |
182 #if ENABLE(BLOB) | 185 #if ENABLE(BLOB) |
183 void FormData::appendFileRange(const String& filename, long long start, long lon
g length, double expectedModificationTime, bool shouldGenerateFile) | 186 void FormData::appendFileRange(const String& filename, long long start, long lon
g length, double expectedModificationTime, bool shouldGenerateFile) |
184 { | 187 { |
185 m_elements.append(FormDataElement(filename, start, length, expectedModificat
ionTime, shouldGenerateFile)); | 188 m_elements.append(FormDataElement(filename, start, length, expectedModificat
ionTime, shouldGenerateFile)); |
186 } | 189 } |
187 | 190 |
188 void FormData::appendBlob(const KURL& blobURL) | 191 void FormData::appendBlob(const String& blobUUID, PassRefPtr<BlobDataHandle> opt
ionalBlobDataHandle) |
189 { | 192 { |
190 m_elements.append(FormDataElement(blobURL)); | 193 m_elements.append(FormDataElement(blobUUID, optionalBlobDataHandle)); |
191 } | 194 } |
192 #endif | 195 #endif |
193 #if ENABLE(FILE_SYSTEM) | 196 #if ENABLE(FILE_SYSTEM) |
194 void FormData::appendURL(const KURL& url) | 197 void FormData::appendURL(const KURL& url) |
195 { | 198 { |
196 m_elements.append(FormDataElement(url, 0, BlobDataItem::toEndOfFile, invalid
FileTime())); | 199 m_elements.append(FormDataElement(url, 0, BlobDataItem::toEndOfFile, invalid
FileTime())); |
197 } | 200 } |
198 | 201 |
199 void FormData::appendURLRange(const KURL& url, long long start, long long length
, double expectedModificationTime) | 202 void FormData::appendURLRange(const KURL& url, long long start, long long length
, double expectedModificationTime) |
200 { | 203 { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 // Do not add the file if the path is empty. | 275 // Do not add the file if the path is empty. |
273 if (!file->path().isEmpty()) | 276 if (!file->path().isEmpty()) |
274 appendFile(file->path(), shouldGenerateFile); | 277 appendFile(file->path(), shouldGenerateFile); |
275 #if ENABLE(FILE_SYSTEM) | 278 #if ENABLE(FILE_SYSTEM) |
276 if (!file->fileSystemURL().isEmpty()) | 279 if (!file->fileSystemURL().isEmpty()) |
277 appendURL(file->fileSystemURL()); | 280 appendURL(file->fileSystemURL()); |
278 #endif | 281 #endif |
279 } | 282 } |
280 #if ENABLE(BLOB) | 283 #if ENABLE(BLOB) |
281 else | 284 else |
282 appendBlob(value.blob()->url()); | 285 appendBlob(value.blob()->uuid(), value.blob()->blobDataHandl
e()); |
283 #endif | 286 #endif |
284 } else | 287 } else |
285 appendData(value.data().data(), value.data().length()); | 288 appendData(value.data().data(), value.data().length()); |
286 appendData("\r\n", 2); | 289 appendData("\r\n", 2); |
287 } else { | 290 } else { |
288 // Omit the name "isindex" if it's the first form data element. | 291 // Omit the name "isindex" if it's the first form data element. |
289 // FIXME: Why is this a good rule? Is this obsolete now? | 292 // FIXME: Why is this a good rule? Is this obsolete now? |
290 if (encodedData.isEmpty() && key.data() == "isindex") | 293 if (encodedData.isEmpty() && key.data() == "isindex") |
291 FormDataBuilder::encodeStringAsFormData(encodedData, value.data(
)); | 294 FormDataBuilder::encodeStringAsFormData(encodedData, value.data(
)); |
292 else | 295 else |
(...skipping 20 matching lines...) Expand all Loading... |
313 } | 316 } |
314 | 317 |
315 String FormData::flattenToString() const | 318 String FormData::flattenToString() const |
316 { | 319 { |
317 Vector<char> bytes; | 320 Vector<char> bytes; |
318 flatten(bytes); | 321 flatten(bytes); |
319 return Latin1Encoding().decode(reinterpret_cast<const char*>(bytes.data()),
bytes.size()); | 322 return Latin1Encoding().decode(reinterpret_cast<const char*>(bytes.data()),
bytes.size()); |
320 } | 323 } |
321 | 324 |
322 #if ENABLE(BLOB) | 325 #if ENABLE(BLOB) |
323 static void appendBlobResolved(FormData* formData, const KURL& url) | 326 #if PLATFORM(CHROMIUM) |
| 327 // Chromium doesn't store blob data in renderer processes. |
| 328 #else |
| 329 static void appendBlobResolved(FormData* formData, const String& blobUUID) |
324 { | 330 { |
325 RefPtr<BlobStorageData> blobData = static_cast<BlobRegistryImpl&>(blobRegist
ry()).getBlobDataFromURL(KURL(ParsedURLString, url)); | 331 RefPtr<BlobStorageData> blobData = static_cast<BlobRegistryImpl&>(blobRegist
ry()).getBlobDataFromUUID(blobUUID); |
326 if (!blobData) | 332 if (!blobData) |
327 return; | 333 return; |
328 | 334 |
329 BlobDataItemList::const_iterator it = blobData->items().begin(); | 335 BlobDataItemList::const_iterator it = blobData->items().begin(); |
330 const BlobDataItemList::const_iterator itend = blobData->items().end(); | 336 const BlobDataItemList::const_iterator itend = blobData->items().end(); |
331 for (; it != itend; ++it) { | 337 for (; it != itend; ++it) { |
332 const BlobDataItem& blobItem = *it; | 338 const BlobDataItem& blobItem = *it; |
333 if (blobItem.type == BlobDataItem::Data) | 339 if (blobItem.type == BlobDataItem::Data) |
334 formData->appendData(blobItem.data->data() + static_cast<int>(blobIt
em.offset), static_cast<int>(blobItem.length)); | 340 formData->appendData(blobItem.data->data() + static_cast<int>(blobIt
em.offset), static_cast<int>(blobItem.length)); |
335 else if (blobItem.type == BlobDataItem::File) | 341 else if (blobItem.type == BlobDataItem::File) |
336 formData->appendFileRange(blobItem.path, blobItem.offset, blobItem.l
ength, blobItem.expectedModificationTime); | 342 formData->appendFileRange(blobItem.path, blobItem.offset, blobItem.l
ength, blobItem.expectedModificationTime); |
337 else if (blobItem.type == BlobDataItem::Blob) | 343 else if (blobItem.type == BlobDataItem::Blob) |
338 appendBlobResolved(formData, blobItem.url); | 344 appendBlobResolved(formData, blobItem.blobDataHandle->uuid()); |
339 else | 345 else |
340 ASSERT_NOT_REACHED(); | 346 ASSERT_NOT_REACHED(); |
341 } | 347 } |
342 } | 348 } |
343 | 349 |
344 PassRefPtr<FormData> FormData::resolveBlobReferences() | 350 PassRefPtr<FormData> FormData::resolveBlobReferences() |
345 { | 351 { |
346 // First check if any blobs needs to be resolved, or we can take the fast pa
th. | 352 // First check if any blobs needs to be resolved, or we can take the fast pa
th. |
347 bool hasBlob = false; | 353 bool hasBlob = false; |
348 Vector<FormDataElement>::const_iterator it = elements().begin(); | 354 Vector<FormDataElement>::const_iterator it = elements().begin(); |
(...skipping 13 matching lines...) Expand all Loading... |
362 newFormData->setAlwaysStream(alwaysStream()); | 368 newFormData->setAlwaysStream(alwaysStream()); |
363 newFormData->setIdentifier(identifier()); | 369 newFormData->setIdentifier(identifier()); |
364 it = elements().begin(); | 370 it = elements().begin(); |
365 for (; it != itend; ++it) { | 371 for (; it != itend; ++it) { |
366 const FormDataElement& element = *it; | 372 const FormDataElement& element = *it; |
367 if (element.m_type == FormDataElement::data) | 373 if (element.m_type == FormDataElement::data) |
368 newFormData->appendData(element.m_data.data(), element.m_data.size()
); | 374 newFormData->appendData(element.m_data.data(), element.m_data.size()
); |
369 else if (element.m_type == FormDataElement::encodedFile) | 375 else if (element.m_type == FormDataElement::encodedFile) |
370 newFormData->appendFileRange(element.m_filename, element.m_fileStart
, element.m_fileLength, element.m_expectedFileModificationTime, element.m_should
GenerateFile); | 376 newFormData->appendFileRange(element.m_filename, element.m_fileStart
, element.m_fileLength, element.m_expectedFileModificationTime, element.m_should
GenerateFile); |
371 else if (element.m_type == FormDataElement::encodedBlob) | 377 else if (element.m_type == FormDataElement::encodedBlob) |
372 appendBlobResolved(newFormData.get(), element.m_url); | 378 appendBlobResolved(newFormData.get(), element.m_blobUUID); |
373 else | 379 else |
374 ASSERT_NOT_REACHED(); | 380 ASSERT_NOT_REACHED(); |
375 } | 381 } |
376 return newFormData.release(); | 382 return newFormData.release(); |
377 } | 383 } |
378 #endif | 384 #endif // CHROMIUM |
| 385 #endif // BLOB |
379 | 386 |
380 void FormData::generateFiles(Document* document) | 387 void FormData::generateFiles(Document* document) |
381 { | 388 { |
382 ASSERT(!m_hasGeneratedFiles); | 389 ASSERT(!m_hasGeneratedFiles); |
383 | 390 |
384 if (m_hasGeneratedFiles) | 391 if (m_hasGeneratedFiles) |
385 return; | 392 return; |
386 | 393 |
387 Page* page = document->page(); | 394 Page* page = document->page(); |
388 if (!page) | 395 if (!page) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 info.addMember(m_boundary); | 431 info.addMember(m_boundary); |
425 info.addMember(m_elements); | 432 info.addMember(m_elements); |
426 } | 433 } |
427 | 434 |
428 void FormDataElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) cons
t | 435 void FormDataElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) cons
t |
429 { | 436 { |
430 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Loader); | 437 MemoryClassInfo info(memoryObjectInfo, this, PlatformMemoryTypes::Loader); |
431 info.addMember(m_data); | 438 info.addMember(m_data); |
432 info.addMember(m_filename); | 439 info.addMember(m_filename); |
433 #if ENABLE(BLOB) | 440 #if ENABLE(BLOB) |
434 info.addMember(m_url); | 441 info.addMember(m_blobUUID); |
435 #endif | 442 #endif |
436 info.addMember(m_generatedFilename); | 443 info.addMember(m_generatedFilename); |
437 } | 444 } |
438 | 445 |
439 static void encodeElement(Encoder& encoder, const FormDataElement& element) | 446 static void encodeElement(Encoder& encoder, const FormDataElement& element) |
440 { | 447 { |
441 encoder.encodeUInt32(element.m_type); | 448 encoder.encodeUInt32(element.m_type); |
442 | 449 |
443 switch (element.m_type) { | 450 switch (element.m_type) { |
444 case FormDataElement::data: | 451 case FormDataElement::data: |
(...skipping 10 matching lines...) Expand all Loading... |
455 encoder.encodeDouble(element.m_expectedFileModificationTime); | 462 encoder.encodeDouble(element.m_expectedFileModificationTime); |
456 #else | 463 #else |
457 encoder.encodeInt64(0); | 464 encoder.encodeInt64(0); |
458 encoder.encodeInt64(0); | 465 encoder.encodeInt64(0); |
459 encoder.encodeDouble(invalidFileTime()); | 466 encoder.encodeDouble(invalidFileTime()); |
460 #endif | 467 #endif |
461 return; | 468 return; |
462 | 469 |
463 #if ENABLE(BLOB) | 470 #if ENABLE(BLOB) |
464 case FormDataElement::encodedBlob: | 471 case FormDataElement::encodedBlob: |
465 encoder.encodeString(element.m_url.string()); | 472 encoder.encodeString(element.m_blobUUID); |
466 return; | 473 return; |
467 #endif | 474 #endif |
468 | 475 |
469 #if ENABLE(FILE_SYSTEM) | 476 #if ENABLE(FILE_SYSTEM) |
470 case FormDataElement::encodedURL: | 477 case FormDataElement::encodedFileSystemURL: |
471 encoder.encodeString(element.m_url.string()); | 478 encoder.encodeString(element.m_fileSystemURL.string()); |
472 encoder.encodeInt64(element.m_fileStart); | 479 encoder.encodeInt64(element.m_fileStart); |
473 encoder.encodeInt64(element.m_fileLength); | 480 encoder.encodeInt64(element.m_fileLength); |
474 encoder.encodeDouble(element.m_expectedFileModificationTime); | 481 encoder.encodeDouble(element.m_expectedFileModificationTime); |
475 return; | 482 return; |
476 #endif | 483 #endif |
477 } | 484 } |
478 | 485 |
479 ASSERT_NOT_REACHED(); | 486 ASSERT_NOT_REACHED(); |
480 } | 487 } |
481 | 488 |
(...skipping 10 matching lines...) Expand all Loading... |
492 if (!decoder.decodeBytes(data)) | 499 if (!decoder.decodeBytes(data)) |
493 return false; | 500 return false; |
494 size_t size = data.size(); | 501 size_t size = data.size(); |
495 element.m_data.resize(size); | 502 element.m_data.resize(size); |
496 memcpy(element.m_data.data(), data.data(), size); | 503 memcpy(element.m_data.data(), data.data(), size); |
497 return true; | 504 return true; |
498 } | 505 } |
499 | 506 |
500 case FormDataElement::encodedFile: | 507 case FormDataElement::encodedFile: |
501 #if ENABLE(FILE_SYSTEM) | 508 #if ENABLE(FILE_SYSTEM) |
502 case FormDataElement::encodedURL: | 509 case FormDataElement::encodedFileSystemURL: |
503 #endif | 510 #endif |
504 { | 511 { |
505 element.m_type = static_cast<FormDataElement::Type>(type); | 512 element.m_type = static_cast<FormDataElement::Type>(type); |
506 String filenameOrURL; | 513 String filenameOrURL; |
507 if (!decoder.decodeString(filenameOrURL)) | 514 if (!decoder.decodeString(filenameOrURL)) |
508 return false; | 515 return false; |
509 if (type == FormDataElement::encodedFile) { | 516 if (type == FormDataElement::encodedFile) { |
510 if (!decoder.decodeString(element.m_generatedFilename)) | 517 if (!decoder.decodeString(element.m_generatedFilename)) |
511 return false; | 518 return false; |
512 if (!decoder.decodeBool(element.m_shouldGenerateFile)) | 519 if (!decoder.decodeBool(element.m_shouldGenerateFile)) |
513 return false; | 520 return false; |
514 } | 521 } |
515 int64_t fileStart; | 522 int64_t fileStart; |
516 if (!decoder.decodeInt64(fileStart)) | 523 if (!decoder.decodeInt64(fileStart)) |
517 return false; | 524 return false; |
518 if (fileStart < 0) | 525 if (fileStart < 0) |
519 return false; | 526 return false; |
520 int64_t fileLength; | 527 int64_t fileLength; |
521 if (!decoder.decodeInt64(fileLength)) | 528 if (!decoder.decodeInt64(fileLength)) |
522 return false; | 529 return false; |
523 if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart) | 530 if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart) |
524 return false; | 531 return false; |
525 double expectedFileModificationTime; | 532 double expectedFileModificationTime; |
526 if (!decoder.decodeDouble(expectedFileModificationTime)) | 533 if (!decoder.decodeDouble(expectedFileModificationTime)) |
527 return false; | 534 return false; |
528 | 535 |
529 #if ENABLE(FILE_SYSTEM) | 536 #if ENABLE(FILE_SYSTEM) |
530 if (type == FormDataElement::encodedURL) | 537 if (type == FormDataElement::encodedFileSystemURL) |
531 element.m_url = KURL(KURL(), filenameOrURL); | 538 element.m_fileSystemURL = KURL(KURL(), filenameOrURL); |
532 else | 539 else |
533 #endif | 540 #endif |
534 element.m_filename = filenameOrURL; | 541 element.m_filename = filenameOrURL; |
535 | 542 |
536 #if ENABLE(BLOB) | 543 #if ENABLE(BLOB) |
537 element.m_fileStart = fileStart; | 544 element.m_fileStart = fileStart; |
538 element.m_fileLength = fileLength; | 545 element.m_fileLength = fileLength; |
539 element.m_expectedFileModificationTime = expectedFileModificationTime; | 546 element.m_expectedFileModificationTime = expectedFileModificationTime; |
540 #endif | 547 #endif |
541 return true; | 548 return true; |
542 } | 549 } |
543 | 550 |
544 #if ENABLE(BLOB) | 551 #if ENABLE(BLOB) |
545 case FormDataElement::encodedBlob: | 552 case FormDataElement::encodedBlob: |
546 element.m_type = FormDataElement::encodedBlob; | 553 element.m_type = FormDataElement::encodedBlob; |
547 String blobURLString; | 554 String blobUUID; |
548 if (!decoder.decodeString(blobURLString)) | 555 if (!decoder.decodeString(blobUUID)) |
549 return false; | 556 return false; |
550 element.m_url = KURL(KURL(), blobURLString); | 557 element.m_blobUUID = blobUUID; |
| 558 // Note we're not setting the optionalBlobDataHandle here. |
551 return true; | 559 return true; |
552 #endif | 560 #endif |
553 | 561 |
554 } | 562 } |
555 | 563 |
556 return false; | 564 return false; |
557 } | 565 } |
558 | 566 |
559 void FormData::encode(Encoder& encoder) const | 567 void FormData::encode(Encoder& encoder) const |
560 { | 568 { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 if (!decoder.decodeBool(data->m_hasGeneratedFiles)) | 607 if (!decoder.decodeBool(data->m_hasGeneratedFiles)) |
600 return 0; | 608 return 0; |
601 | 609 |
602 if (!decoder.decodeInt64(data->m_identifier)) | 610 if (!decoder.decodeInt64(data->m_identifier)) |
603 return 0; | 611 return 0; |
604 | 612 |
605 return data.release(); | 613 return data.release(); |
606 } | 614 } |
607 | 615 |
608 } // namespace WebCore | 616 } // namespace WebCore |
OLD | NEW |