Title: [168199] trunk/Source/WebCore
- Revision
- 168199
- Author
- ander...@apple.com
- Date
- 2014-05-02 15:38:47 -0700 (Fri, 02 May 2014)
Log Message
Implement FormData decoding using KeyedDecoder
https://bugs.webkit.org/show_bug.cgi?id=132494
Reviewed by Tim Horton.
* platform/KeyedCoding.h:
(WebCore::KeyedDecoder::decodeEnum):
* platform/network/FormData.cpp:
(WebCore::decodeElement):
(WebCore::FormData::decode):
* platform/network/FormData.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (168198 => 168199)
--- trunk/Source/WebCore/ChangeLog 2014-05-02 22:37:07 UTC (rev 168198)
+++ trunk/Source/WebCore/ChangeLog 2014-05-02 22:38:47 UTC (rev 168199)
@@ -1,3 +1,17 @@
+2014-05-02 Anders Carlsson <ander...@apple.com>
+
+ Implement FormData decoding using KeyedDecoder
+ https://bugs.webkit.org/show_bug.cgi?id=132494
+
+ Reviewed by Tim Horton.
+
+ * platform/KeyedCoding.h:
+ (WebCore::KeyedDecoder::decodeEnum):
+ * platform/network/FormData.cpp:
+ (WebCore::decodeElement):
+ (WebCore::FormData::decode):
+ * platform/network/FormData.h:
+
2014-05-02 Brent Fulgham <bfulg...@apple.com>
[iOS] deviceScaleFactor is being double-applied when rendering captions in full screen mode
Modified: trunk/Source/WebCore/platform/KeyedCoding.h (168198 => 168199)
--- trunk/Source/WebCore/platform/KeyedCoding.h 2014-05-02 22:37:07 UTC (rev 168198)
+++ trunk/Source/WebCore/platform/KeyedCoding.h 2014-05-02 22:38:47 UTC (rev 168199)
@@ -72,7 +72,7 @@
if (!decodeInt64(key, intValue))
return false;
- if (!isValidEnumFunction(intValue))
+ if (!isValidEnumFunction(static_cast<T>(intValue)))
return false;
value = static_cast<T>(intValue);
Modified: trunk/Source/WebCore/platform/network/FormData.cpp (168198 => 168199)
--- trunk/Source/WebCore/platform/network/FormData.cpp 2014-05-02 22:37:07 UTC (rev 168198)
+++ trunk/Source/WebCore/platform/network/FormData.cpp 2014-05-02 22:38:47 UTC (rev 168199)
@@ -543,6 +543,75 @@
return false;
}
+static bool decodeElement(KeyedDecoder& decoder, FormDataElement& element)
+{
+ if (!decoder.decodeEnum("type", element.m_type, [](FormDataElement::Type type) {
+ switch (type) {
+ case FormDataElement::Type::Data:
+ case FormDataElement::Type::EncodedFile:
+#if ENABLE(BLOB)
+ case FormDataElement::Type::EncodedBlob:
+#endif
+ return true;
+ }
+
+ return false;
+ }))
+ return false;
+
+ switch (element.m_type) {
+ case FormDataElement::Type::Data:
+ if (!decoder.decodeBytes("data", element.m_data))
+ return false;
+ break;
+
+ case FormDataElement::Type::EncodedFile: {
+ if (!decoder.decodeString("filename", element.m_filename))
+ return false;
+ if (!decoder.decodeString("generatedFilename", element.m_generatedFilename))
+ return false;
+ if (!decoder.decodeBool("shouldGenerateFile", element.m_shouldGenerateFile))
+ return false;
+
+#if ENABLE(BLOB)
+ int64_t fileStart;
+ if (!decoder.decodeInt64("fileStart", fileStart))
+ return false;
+ if (fileStart < 0)
+ return false;
+
+ int64_t fileLength;
+ if (!decoder.decodeInt64("fileLength", fileLength))
+ return false;
+ if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart)
+ return false;
+
+ double expectedFileModificationTime;
+ if (!decoder.decodeDouble("expectedFileModificationTime", expectedFileModificationTime))
+ return false;
+
+ element.m_fileStart = fileStart;
+ element.m_fileLength = fileLength;
+ element.m_expectedFileModificationTime = expectedFileModificationTime;
+#endif
+ break;
+ }
+
+#if ENABLE(BLOB)
+ case FormDataElement::Type::EncodedBlob: {
+ String blobURLString;
+ if (!decoder.decodeString("url", blobURLString))
+ return false;
+
+ element.m_url = URL(URL(), blobURLString);
+ break;
+ }
+#endif
+ }
+
+ return true;
+}
+
void FormData::encode(Encoder& encoder) const
{
encoder.encodeBool(m_alwaysStream);
@@ -605,4 +674,25 @@
return data.release();
}
+PassRefPtr<FormData> FormData::decode(KeyedDecoder& decoder)
+{
+ RefPtr<FormData> data = ""
+
+ if (!decoder.decodeBool("alwaysStream", data->m_alwaysStream))
+ return nullptr;
+
+ if (!decoder.decodeBytes("boundary", data->m_boundary))
+ return nullptr;
+
+ if (!decoder.decodeObjects("elements", data->m_elements, [](KeyedDecoder& decoder, FormDataElement& element) {
+ return decodeElement(decoder, element);
+ }))
+ return nullptr;
+
+ if (!decoder.decodeInt64("identifier", data->m_identifier))
+ return nullptr;
+
+ return data.release();
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/network/FormData.h (168198 => 168199)
--- trunk/Source/WebCore/platform/network/FormData.h 2014-05-02 22:37:07 UTC (rev 168198)
+++ trunk/Source/WebCore/platform/network/FormData.h 2014-05-02 22:38:47 UTC (rev 168199)
@@ -30,6 +30,7 @@
class Document;
class FormDataList;
+class KeyedDecoder;
class KeyedEncoder;
class TextEncoding;
@@ -145,6 +146,7 @@
void encode(Encoder&) const;
void encode(KeyedEncoder&) const;
static PassRefPtr<FormData> decode(Decoder&);
+ static PassRefPtr<FormData> decode(KeyedDecoder&);
void appendData(const void* data, size_t);
void appendFile(const String& filePath, bool shouldGenerateFile = false);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes