static bool decode(Decoder& decoder, FormDataElement& element) { uint32_t type; if (!decoder.decodeUInt32(type)) return false; switch (type) { case FormDataElement::data: { element.m_type = FormDataElement::data; Vector<uint8_t> data; if (!decoder.decodeBytes(data)) return false; size_t size = data.size(); element.m_data.resize(size); memcpy(element.m_data.data(), data.data(), size); return true; } case FormDataElement::encodedFile: { element.m_type = FormDataElement::encodedFile; if (!decoder.decodeString(element.m_filename)) return false; if (!decoder.decodeBool(element.m_shouldGenerateFile)) return false; int64_t fileStart; if (!decoder.decodeInt64(fileStart)) return false; if (fileStart < 0) return false; int64_t fileLength; if (!decoder.decodeInt64(fileLength)) return false; if (fileLength < fileStart) return false; double expectedFileModificationTime; if (!decoder.decodeDouble(expectedFileModificationTime)) return false; #if ENABLE(BLOB) element.m_fileStart = fileStart; element.m_fileLength = fileLength; element.m_expectedFileModificationTime = expectedFileModificationTime; #endif return true; } #if ENABLE(BLOB) case FormDataElement::encodedBlob: element.m_type = FormDataElement::encodedBlob; String blobURLString; if (!decoder.decodeString(blobURLString)) return false; element.m_blobURL = KURL(KURL(), blobURLString); return true; #endif } return false; }
static bool decodeElement(Decoder& decoder, FormDataElement& element) { uint32_t type; if (!decoder.decodeUInt32(type)) return false; switch (static_cast<FormDataElement::Type>(type)) { case FormDataElement::Type::Data: { element.m_type = FormDataElement::Type::Data; Vector<uint8_t> data; if (!decoder.decodeBytes(data)) return false; size_t size = data.size(); element.m_data.resize(size); memcpy(element.m_data.data(), data.data(), size); return true; } case FormDataElement::Type::EncodedFile: { element.m_type = static_cast<FormDataElement::Type>(type); String filenameOrURL; if (!decoder.decodeString(filenameOrURL)) return false; if (static_cast<FormDataElement::Type>(type) == FormDataElement::Type::EncodedFile) { if (!decoder.decodeString(element.m_generatedFilename)) return false; if (!decoder.decodeBool(element.m_shouldGenerateFile)) return false; } int64_t fileStart; if (!decoder.decodeInt64(fileStart)) return false; if (fileStart < 0) return false; int64_t fileLength; if (!decoder.decodeInt64(fileLength)) return false; if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart) return false; double expectedFileModificationTime; if (!decoder.decodeDouble(expectedFileModificationTime)) return false; element.m_filename = filenameOrURL; element.m_fileStart = fileStart; element.m_fileLength = fileLength; element.m_expectedFileModificationTime = expectedFileModificationTime; return true; } case FormDataElement::Type::EncodedBlob: element.m_type = FormDataElement::Type::EncodedBlob; String blobURLString; if (!decoder.decodeString(blobURLString)) return false; element.m_url = URL(URL(), blobURLString); return true; } return false; }