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;