Index: src/value-serializer.h |
diff --git a/src/value-serializer.h b/src/value-serializer.h |
index 82cf21ef2b51e8dfaacf8f768b8f9eec22ff749c..a985aaffb8b533c6e87517824a13f09d9e7df5e8 100644 |
--- a/src/value-serializer.h |
+++ b/src/value-serializer.h |
@@ -59,6 +59,14 @@ class ValueSerializer { |
*/ |
std::vector<uint8_t> ReleaseBuffer() { return std::move(buffer_); } |
+ /* |
+ * Marks an ArrayBuffer as havings its contents transferred out of band. |
+ * Pass the corresponding JSArrayBuffer in the deserializing context to |
+ * ValueDeserializer::TransferArrayBuffer. |
+ */ |
+ void TransferArrayBuffer(uint32_t transfer_id, |
+ Handle<JSArrayBuffer> array_buffer); |
+ |
private: |
// Writing the wire format. |
void WriteTag(SerializationTag tag); |
@@ -105,6 +113,9 @@ class ValueSerializer { |
IdentityMap<uint32_t> id_map_; |
uint32_t next_id_ = 0; |
+ // A similar map, for transferred array buffers. |
+ IdentityMap<uint32_t> array_buffer_transfer_map_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ValueSerializer); |
}; |
@@ -144,6 +155,13 @@ class ValueDeserializer { |
MaybeHandle<Object> ReadObjectUsingEntireBufferForLegacyFormat() |
WARN_UNUSED_RESULT; |
+ /* |
+ * Accepts the array buffer corresponding to the one passed previously to |
+ * ValueSerializer::TransferArrayBuffer. |
+ */ |
+ void TransferArrayBuffer(uint32_t transfer_id, |
+ Handle<JSArrayBuffer> array_buffer); |
+ |
private: |
// Reading the wire format. |
Maybe<SerializationTag> PeekTag() const WARN_UNUSED_RESULT; |
@@ -169,6 +187,7 @@ class ValueDeserializer { |
MaybeHandle<JSMap> ReadJSMap() WARN_UNUSED_RESULT; |
MaybeHandle<JSSet> ReadJSSet() WARN_UNUSED_RESULT; |
MaybeHandle<JSArrayBuffer> ReadJSArrayBuffer() WARN_UNUSED_RESULT; |
+ MaybeHandle<JSArrayBuffer> ReadTransferredJSArrayBuffer() WARN_UNUSED_RESULT; |
/* |
* Reads key-value pairs into the object until the specified end tag is |
@@ -186,9 +205,12 @@ class ValueDeserializer { |
const uint8_t* position_; |
const uint8_t* const end_; |
uint32_t version_ = 0; |
- Handle<SeededNumberDictionary> id_map_; // Always a global handle. |
uint32_t next_id_ = 0; |
+ // Always global handles. |
+ Handle<SeededNumberDictionary> id_map_; |
+ MaybeHandle<SeededNumberDictionary> array_buffer_transfer_map_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ValueDeserializer); |
}; |