summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
commitcd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch)
tree8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
parentd11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff)
downloadqtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp')
-rw-r--r--Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp b/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
index 547b68d73..1f0e13c71 100644
--- a/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/EncoderAdapter.cpp
@@ -28,6 +28,7 @@
#include "DataReference.h"
#include "WebCoreArgumentCoders.h"
+#include <wtf/text/WTFString.h>
namespace WebKit {
@@ -83,7 +84,24 @@ void EncoderAdapter::encodeDouble(double value)
void EncoderAdapter::encodeString(const String& value)
{
- m_encoder->encode(value);
+ // This mimics the CoreIPC binary encoding of Strings prior to r88886.
+ // Whenever the CoreIPC binary encoding changes, we'll have to "undo" the changes here.
+ // FIXME: We shouldn't use the CoreIPC binary encoding format for history,
+ // and we should come up with a migration strategy so we can actually bump the version number
+ // without breaking encoding/decoding of the history tree.
+
+ // Special case the null string.
+ if (value.isNull()) {
+ m_encoder->encodeUInt32(std::numeric_limits<uint32_t>::max());
+ return;
+ }
+
+ uint32_t length = value.length();
+ m_encoder->encode(length);
+
+ uint64_t lengthInBytes = length * sizeof(UChar);
+ m_encoder->encode(lengthInBytes);
+ m_encoder->encodeFixedLengthData(reinterpret_cast<const uint8_t*>(value.characters()), length * sizeof(UChar), __alignof(UChar));
}
}