Title: [159004] trunk/Source
Revision
159004
Author
[email protected]
Date
2013-11-09 17:27:48 -0800 (Sat, 09 Nov 2013)

Log Message

Encode form data using the KeyedEncoder
https://bugs.webkit.org/show_bug.cgi?id=124107

Reviewed by Sam Weinig.

Source/WebCore:

* platform/KeyedCoding.h:
(WebCore::KeyedEncoder::encodeEnum):
* platform/network/FormData.cpp:
(WebCore::encodeElement):
(WebCore::FormData::encode):
* platform/network/FormData.h:

Source/WebKit2:

* Shared/cf/KeyedEncoder.cpp:
(WebKit::KeyedEncoder::encodeBool):
(WebKit::KeyedEncoder::encodeDouble):
* Shared/cf/KeyedEncoder.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (159003 => 159004)


--- trunk/Source/WebCore/ChangeLog	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebCore/ChangeLog	2013-11-10 01:27:48 UTC (rev 159004)
@@ -1,3 +1,17 @@
+2013-11-09  Anders Carlsson  <[email protected]>
+
+        Encode form data using the KeyedEncoder
+        https://bugs.webkit.org/show_bug.cgi?id=124107
+
+        Reviewed by Sam Weinig.
+
+        * platform/KeyedCoding.h:
+        (WebCore::KeyedEncoder::encodeEnum):
+        * platform/network/FormData.cpp:
+        (WebCore::encodeElement):
+        (WebCore::FormData::encode):
+        * platform/network/FormData.h:
+
 2013-11-09  Sam Weinig  <[email protected]>
 
         Modernize CanvasObserverProxy

Modified: trunk/Source/WebCore/platform/KeyedCoding.h (159003 => 159004)


--- trunk/Source/WebCore/platform/KeyedCoding.h	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebCore/platform/KeyedCoding.h	2013-11-10 01:27:48 UTC (rev 159004)
@@ -36,12 +36,22 @@
 
 public:
     virtual void encodeBytes(const String& key, const uint8_t*, size_t) = 0;
+    virtual void encodeBool(const String& key, bool) = 0;
     virtual void encodeUInt32(const String& key, uint32_t) = 0;
     virtual void encodeInt32(const String& key, int32_t) = 0;
     virtual void encodeInt64(const String& key, int64_t) = 0;
     virtual void encodeFloat(const String& key, float) = 0;
+    virtual void encodeDouble(const String& key, double) = 0;
     virtual void encodeString(const String& key, const String&) = 0;
 
+    template<typename T>
+    void encodeEnum(const String& key, T value)
+    {
+        static_assert(std::is_enum<T>::value, "T must be an enum type");
+
+        encodeInt64(key, static_cast<int64_t>(value));
+    }
+
     template<typename T, typename F>
     void encodeObject(const String& key, const T& object, F&& function)
     {

Modified: trunk/Source/WebCore/platform/network/FormData.cpp (159003 => 159004)


--- trunk/Source/WebCore/platform/network/FormData.cpp	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebCore/platform/network/FormData.cpp	2013-11-10 01:27:48 UTC (rev 159004)
@@ -33,6 +33,7 @@
 #include "FileSystem.h"
 #include "FormDataBuilder.h"
 #include "FormDataList.h"
+#include "KeyedCoding.h"
 #include "MIMETypeRegistry.h"
 #include "Page.h"
 #include "TextEncoding.h"
@@ -443,6 +444,35 @@
     ASSERT_NOT_REACHED();
 }
 
+static void encodeElement(KeyedEncoder& encoder, const FormDataElement& element)
+{
+    encoder.encodeEnum("type", element.m_type);
+
+    switch (element.m_type) {
+    case FormDataElement::data:
+        encoder.encodeBytes("data", reinterpret_cast<const uint8_t*>(element.m_data.data()), element.m_data.size());
+        return;
+    case FormDataElement::encodedFile:
+        encoder.encodeString("filename", element.m_filename);
+        encoder.encodeString("generatedFilename", element.m_generatedFilename);
+        encoder.encodeBool("shouldGenerateFile", element.m_shouldGenerateFile);
+#if ENABLE(BLOB)
+        encoder.encodeInt64("fileStart", element.m_fileStart);
+        encoder.encodeInt64("fileLength", element.m_fileLength);
+        encoder.encodeDouble("expectedFileModificationTime", element.m_expectedFileModificationTime);
+#endif
+        return;
+
+#if ENABLE(BLOB)
+    case FormDataElement::encodedBlob:
+        encoder.encodeString("url", element.m_url.string());
+        return;
+#endif
+    }
+
+    ASSERT_NOT_REACHED();
+}
+
 static bool decodeElement(Decoder& decoder, FormDataElement& element)
 {
     uint32_t type;
@@ -527,6 +557,19 @@
     encoder.encodeInt64(m_identifier);
 }
 
+void FormData::encode(KeyedEncoder& encoder) const
+{
+    encoder.encodeBool("alwaysStream", m_alwaysStream);
+    encoder.encodeBytes("boundary", reinterpret_cast<const uint8_t*>(m_boundary.data()), m_boundary.size());
+
+    encoder.encodeObjects("elements", m_elements.begin(), m_elements.end(), [](KeyedEncoder& encoder, const FormDataElement& element) {
+        encodeElement(encoder, element);
+    });
+
+    encoder.encodeBool("hasGeneratedFiles", m_hasGeneratedFiles);
+    encoder.encodeInt64("identifier", m_identifier);
+}
+
 PassRefPtr<FormData> FormData::decode(Decoder& decoder)
 {
     RefPtr<FormData> data = ""

Modified: trunk/Source/WebCore/platform/network/FormData.h (159003 => 159004)


--- trunk/Source/WebCore/platform/network/FormData.h	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebCore/platform/network/FormData.h	2013-11-10 01:27:48 UTC (rev 159004)
@@ -30,6 +30,7 @@
 
 class Document;
 class FormDataList;
+class KeyedEncoder;
 class TextEncoding;
 
 class FormDataElement {
@@ -108,6 +109,7 @@
     ~FormData();
 
     void encode(Encoder&) const;
+    void encode(KeyedEncoder&) const;
     static PassRefPtr<FormData> decode(Decoder&);
 
     void appendData(const void* data, size_t);

Modified: trunk/Source/WebKit2/ChangeLog (159003 => 159004)


--- trunk/Source/WebKit2/ChangeLog	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-10 01:27:48 UTC (rev 159004)
@@ -1,5 +1,17 @@
 2013-11-09  Anders Carlsson  <[email protected]>
 
+        Encode form data using the KeyedEncoder
+        https://bugs.webkit.org/show_bug.cgi?id=124107
+
+        Reviewed by Sam Weinig.
+
+        * Shared/cf/KeyedEncoder.cpp:
+        (WebKit::KeyedEncoder::encodeBool):
+        (WebKit::KeyedEncoder::encodeDouble):
+        * Shared/cf/KeyedEncoder.h:
+
+2013-11-09  Anders Carlsson  <[email protected]>
+
         Remove an unused file.
 
         Rubber-stamped by Andreas Kling.

Modified: trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp (159003 => 159004)


--- trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebKit2/Shared/cf/KeyedEncoder.cpp	2013-11-10 01:27:48 UTC (rev 159004)
@@ -55,6 +55,11 @@
     CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), data.get());
 }
 
+void KeyedEncoder::encodeBool(const String& key, bool value)
+{
+    CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), value ? kCFBooleanTrue : kCFBooleanFalse);
+}
+
 void KeyedEncoder::encodeUInt32(const String& key, uint32_t value)
 {
     auto number = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &value));
@@ -79,6 +84,12 @@
     CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), number.get());
 }
 
+void KeyedEncoder::encodeDouble(const String& key, double value)
+{
+    auto number = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value));
+    CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), number.get());
+}
+
 void KeyedEncoder::encodeString(const String& key, const String& value)
 {
     CFDictionarySetValue(m_dictionaryStack.last(), key.createCFString().get(), value.createCFString().get());

Modified: trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h (159003 => 159004)


--- trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h	2013-11-09 23:26:58 UTC (rev 159003)
+++ trunk/Source/WebKit2/Shared/cf/KeyedEncoder.h	2013-11-10 01:27:48 UTC (rev 159004)
@@ -32,18 +32,19 @@
 
 namespace WebKit {
 
-class KeyedEncoder : public WebCore::KeyedEncoder {
+class KeyedEncoder FINAL : public WebCore::KeyedEncoder {
 public:
     KeyedEncoder();
     ~KeyedEncoder();
 
 private:
     virtual void encodeBytes(const String& key, const uint8_t*, size_t) OVERRIDE;
-
+    virtual void encodeBool(const String& key, bool) OVERRIDE;
     virtual void encodeUInt32(const String& key, uint32_t) OVERRIDE;
     virtual void encodeInt32(const String& key, int32_t) OVERRIDE;
     virtual void encodeInt64(const String& key, int64_t) OVERRIDE;
     virtual void encodeFloat(const String& key, float) OVERRIDE;
+    virtual void encodeDouble(const String& key, double) OVERRIDE;
     virtual void encodeString(const String& key, const String&) OVERRIDE;
 
     virtual void beginObject(const String& key) OVERRIDE;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to