Loading...
Searching...
No Matches
v8-value-serializer.h
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_V8_VALUE_SERIALIZER_H_
6#define INCLUDE_V8_VALUE_SERIALIZER_H_
7
8#include <stddef.h>
9#include <stdint.h>
10
11#include <memory>
12#include <utility>
13#include <vector>
14
15#include "v8-local-handle.h" // NOLINT(build/include_directory)
16#include "v8-maybe.h" // NOLINT(build/include_directory)
17#include "v8config.h" // NOLINT(build/include_directory)
18
19namespace v8 {
20
21class ArrayBuffer;
22class BackingStore;
23class Isolate;
24class Object;
25class SharedArrayBuffer;
26class String;
27class WasmModuleObject;
28class Value;
29
30namespace internal {
31struct ScriptStreamingData;
32class SharedObjectConveyorHandles;
33class ValueDeserializer;
34class ValueSerializer;
35} // namespace internal
36
48 public:
51
53
54 private:
55 friend class internal::ValueSerializer;
56 friend class internal::ValueDeserializer;
57
58 explicit SharedValueConveyor(Isolate* isolate);
59
60 std::unique_ptr<internal::SharedObjectConveyorHandles> private_;
61};
62
68 public:
70 public:
71 virtual ~Delegate() = default;
72
78 virtual void ThrowDataCloneError(Local<String> message) = 0;
79
86 virtual bool HasCustomHostObject(Isolate* isolate);
87
92 virtual Maybe<bool> IsHostObject(Isolate* isolate, Local<Object> object);
93
100
112 Isolate* isolate, Local<SharedArrayBuffer> shared_array_buffer);
113
115 Isolate* isolate, Local<WasmModuleObject> module);
116
130 virtual bool AdoptSharedValueConveyor(Isolate* isolate,
131 SharedValueConveyor&& conveyor);
132
144 virtual void* ReallocateBufferMemory(void* old_buffer, size_t size,
145 size_t* actual_size);
146
152 virtual void FreeBufferMemory(void* buffer);
153 };
154
156 kDisabled,
157 kEnabled,
158 };
159
161 Isolate* isolate,
162 SharedImmutableArrayBufferMode share_immutable_array_buffer =
163 SharedImmutableArrayBufferMode::kDisabled);
164 ValueSerializer(Isolate* isolate, Delegate* delegate,
165 SharedImmutableArrayBufferMode share_immutable_array_buffer =
166 SharedImmutableArrayBufferMode::kDisabled);
168
173
178 Local<Value> value);
179
186 V8_WARN_UNUSED_RESULT std::pair<uint8_t*, size_t> Release();
187
193 void TransferArrayBuffer(uint32_t transfer_id,
194 Local<ArrayBuffer> array_buffer);
195
204
214 std::vector<std::shared_ptr<v8::BackingStore>>
216
222 void WriteUint32(uint32_t value);
223 void WriteUint64(uint64_t value);
224 void WriteDouble(double value);
225 void WriteRawBytes(const void* source, size_t length);
226
228 void operator=(const ValueSerializer&) = delete;
229
230 private:
231 struct PrivateData;
232 PrivateData* private_;
233};
234
240 public:
242 public:
243 virtual ~Delegate() = default;
244
251
257 Isolate* isolate, uint32_t transfer_id);
258
264 Isolate* isolate, uint32_t clone_id);
265
271 };
272
273 ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size);
274 ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size,
275 Delegate* delegate);
277
283
288
293 void TransferArrayBuffer(uint32_t transfer_id,
294 Local<ArrayBuffer> array_buffer);
295
302 Local<SharedArrayBuffer> shared_array_buffer);
303
308 std::vector<std::shared_ptr<v8::BackingStore>> backing_stores);
309
317 void SetSupportsLegacyWireFormat(bool supports_legacy_wire_format);
318
324 uint32_t GetWireFormatVersion() const;
325
331 V8_WARN_UNUSED_RESULT bool ReadUint32(uint32_t* value);
332 V8_WARN_UNUSED_RESULT bool ReadUint64(uint64_t* value);
334 V8_WARN_UNUSED_RESULT bool ReadRawBytes(size_t length, const void** data);
335
337 void operator=(const ValueDeserializer&) = delete;
338
339 private:
340 struct PrivateData;
341 PrivateData* private_;
342};
343
344} // namespace v8
345
346#endif // INCLUDE_V8_VALUE_SERIALIZER_H_
Definition: v8-isolate.h:292
Definition: v8-local-handle.h:366
Definition: v8-local-handle.h:734
Definition: v8-maybe.h:39
Definition: v8-value-serializer.h:47
SharedValueConveyor(SharedValueConveyor &&) noexcept
Definition: v8-value-serializer.h:241
virtual const SharedValueConveyor * GetSharedValueConveyor(Isolate *isolate)
virtual MaybeLocal< Object > ReadHostObject(Isolate *isolate)
virtual MaybeLocal< SharedArrayBuffer > GetSharedArrayBufferFromId(Isolate *isolate, uint32_t clone_id)
virtual MaybeLocal< WasmModuleObject > GetWasmModuleFromId(Isolate *isolate, uint32_t transfer_id)
Definition: v8-value-serializer.h:239
bool ReadUint64(uint64_t *value)
void SetSupportsLegacyWireFormat(bool supports_legacy_wire_format)
ValueDeserializer(Isolate *isolate, const uint8_t *data, size_t size, Delegate *delegate)
void TransferSharedArrayBuffer(uint32_t id, Local< SharedArrayBuffer > shared_array_buffer)
bool ReadDouble(double *value)
ValueDeserializer(const ValueDeserializer &)=delete
bool ReadUint32(uint32_t *value)
void operator=(const ValueDeserializer &)=delete
void TransferArrayBuffer(uint32_t transfer_id, Local< ArrayBuffer > array_buffer)
void SetSharedImmutableBackingStores(std::vector< std::shared_ptr< v8::BackingStore > > backing_stores)
ValueDeserializer(Isolate *isolate, const uint8_t *data, size_t size)
Maybe< bool > ReadHeader(Local< Context > context)
MaybeLocal< Value > ReadValue(Local< Context > context)
uint32_t GetWireFormatVersion() const
bool ReadRawBytes(size_t length, const void **data)
Definition: v8-value-serializer.h:69
virtual void * ReallocateBufferMemory(void *old_buffer, size_t size, size_t *actual_size)
virtual Maybe< uint32_t > GetSharedArrayBufferId(Isolate *isolate, Local< SharedArrayBuffer > shared_array_buffer)
virtual Maybe< uint32_t > GetWasmModuleTransferId(Isolate *isolate, Local< WasmModuleObject > module)
virtual void ThrowDataCloneError(Local< String > message)=0
virtual ~Delegate()=default
virtual bool HasCustomHostObject(Isolate *isolate)
virtual void FreeBufferMemory(void *buffer)
virtual Maybe< bool > IsHostObject(Isolate *isolate, Local< Object > object)
virtual bool AdoptSharedValueConveyor(Isolate *isolate, SharedValueConveyor &&conveyor)
virtual Maybe< bool > WriteHostObject(Isolate *isolate, Local< Object > object)
Definition: v8-value-serializer.h:67
void TransferArrayBuffer(uint32_t transfer_id, Local< ArrayBuffer > array_buffer)
void WriteUint64(uint64_t value)
ValueSerializer(Isolate *isolate, SharedImmutableArrayBufferMode share_immutable_array_buffer=SharedImmutableArrayBufferMode::kDisabled)
void WriteDouble(double value)
std::pair< uint8_t *, size_t > Release()
ValueSerializer(const ValueSerializer &)=delete
void operator=(const ValueSerializer &)=delete
std::vector< std::shared_ptr< v8::BackingStore > > ReleaseSharedImmutableBackingStores()
SharedImmutableArrayBufferMode
Definition: v8-value-serializer.h:155
void WriteUint32(uint32_t value)
ValueSerializer(Isolate *isolate, Delegate *delegate, SharedImmutableArrayBufferMode share_immutable_array_buffer=SharedImmutableArrayBufferMode::kDisabled)
Maybe< bool > WriteValue(Local< Context > context, Local< Value > value)
void WriteRawBytes(const void *source, size_t length)
void SetTreatArrayBufferViewsAsHostObjects(bool mode)
Definition: libplatform.h:15
#define V8_EXPORT
Definition: v8config.h:867
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:681