summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Platform/IPC/DataReference.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Platform/IPC/DataReference.cpp')
-rw-r--r--Source/WebKit2/Platform/IPC/DataReference.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/Source/WebKit2/Platform/IPC/DataReference.cpp b/Source/WebKit2/Platform/IPC/DataReference.cpp
index 0047022e9..9bdec4ff4 100644
--- a/Source/WebKit2/Platform/IPC/DataReference.cpp
+++ b/Source/WebKit2/Platform/IPC/DataReference.cpp
@@ -26,19 +26,34 @@
#include "config.h"
#include "DataReference.h"
-#include "ArgumentDecoder.h"
-#include "ArgumentEncoder.h"
+#include "Decoder.h"
+#include "Encoder.h"
namespace IPC {
-void DataReference::encode(ArgumentEncoder& encoder) const
+void DataReference::encode(Encoder& encoder) const
{
encoder.encodeVariableLengthByteArray(*this);
}
-bool DataReference::decode(ArgumentDecoder& decoder, DataReference& dataReference)
+bool DataReference::decode(Decoder& decoder, DataReference& dataReference)
{
return decoder.decodeVariableLengthByteArray(dataReference);
}
+void SharedBufferDataReference::encode(Encoder& encoder) const
+{
+ uint64_t bufferSize = static_cast<uint64_t>(m_buffer->size());
+ encoder.reserve(bufferSize + sizeof(uint64_t));
+ encoder << bufferSize;
+
+ const char* partialData;
+ unsigned position = 0;
+ while (position < bufferSize) {
+ unsigned bytesToWrite = m_buffer->getSomeData(partialData, position);
+ encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(partialData), bytesToWrite, 1);
+ position += bytesToWrite;
+ }
+}
+
} // namespace IPC