v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
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
14#include "v8-local-handle.h" // NOLINT(build/include_directory)
15#include "v8-maybe.h" // NOLINT(build/include_directory)
16#include "v8config.h" // NOLINT(build/include_directory)
17
18namespace v8 {
19
20class ArrayBuffer;
21class Isolate;
22class Object;
23class SharedArrayBuffer;
24class String;
25class WasmModuleObject;
26class Value;
27
28namespace internal {
29struct ScriptStreamingData;
30class SharedObjectConveyorHandles;
31class ValueDeserializer;
32class ValueSerializer;
33} // namespace internal
34
46 public:
49
50 SharedValueConveyor& operator=(SharedValueConveyor&&) noexcept;
51
52 private:
53 friend class internal::ValueSerializer;
54 friend class internal::ValueDeserializer;
55
56 explicit SharedValueConveyor(Isolate* isolate);
57
58 std::unique_ptr<internal::SharedObjectConveyorHandles> private_;
59};
60
66 public:
68 public:
69 virtual ~Delegate() = default;
70
76 virtual void ThrowDataCloneError(Local<String> message) = 0;
77
84 virtual bool HasCustomHostObject(Isolate* isolate);
85
90 virtual Maybe<bool> IsHostObject(Isolate* isolate, Local<Object> object);
91
97 virtual Maybe<bool> WriteHostObject(Isolate* isolate, Local<Object> object);
98
109 virtual Maybe<uint32_t> GetSharedArrayBufferId(
110 Isolate* isolate, Local<SharedArrayBuffer> shared_array_buffer);
111
112 virtual Maybe<uint32_t> GetWasmModuleTransferId(
113 Isolate* isolate, Local<WasmModuleObject> module);
114
128 virtual bool AdoptSharedValueConveyor(Isolate* isolate,
129 SharedValueConveyor&& conveyor);
130
142 virtual void* ReallocateBufferMemory(void* old_buffer, size_t size,
143 size_t* actual_size);
144
150 virtual void FreeBufferMemory(void* buffer);
151 };
152
153 explicit ValueSerializer(Isolate* isolate);
154 ValueSerializer(Isolate* isolate, Delegate* delegate);
156
160 void WriteHeader();
161
166 Local<Value> value);
167
174 V8_WARN_UNUSED_RESULT std::pair<uint8_t*, size_t> Release();
175
181 void TransferArrayBuffer(uint32_t transfer_id,
182 Local<ArrayBuffer> array_buffer);
183
191 void SetTreatArrayBufferViewsAsHostObjects(bool mode);
192
198 void WriteUint32(uint32_t value);
199 void WriteUint64(uint64_t value);
200 void WriteDouble(double value);
201 void WriteRawBytes(const void* source, size_t length);
202
204 void operator=(const ValueSerializer&) = delete;
205
206 private:
207 struct PrivateData;
209};
210
216 public:
218 public:
219 virtual ~Delegate() = default;
220
226 virtual MaybeLocal<Object> ReadHostObject(Isolate* isolate);
227
232 virtual MaybeLocal<WasmModuleObject> GetWasmModuleFromId(
233 Isolate* isolate, uint32_t transfer_id);
234
239 virtual MaybeLocal<SharedArrayBuffer> GetSharedArrayBufferFromId(
240 Isolate* isolate, uint32_t clone_id);
241
246 virtual const SharedValueConveyor* GetSharedValueConveyor(Isolate* isolate);
247 };
248
249 ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size);
250 ValueDeserializer(Isolate* isolate, const uint8_t* data, size_t size,
251 Delegate* delegate);
253
259
264
269 void TransferArrayBuffer(uint32_t transfer_id,
270 Local<ArrayBuffer> array_buffer);
271
277 void TransferSharedArrayBuffer(uint32_t id,
278 Local<SharedArrayBuffer> shared_array_buffer);
279
287 void SetSupportsLegacyWireFormat(bool supports_legacy_wire_format);
288
294 uint32_t GetWireFormatVersion() const;
295
301 V8_WARN_UNUSED_RESULT bool ReadUint32(uint32_t* value);
302 V8_WARN_UNUSED_RESULT bool ReadUint64(uint64_t* value);
303 V8_WARN_UNUSED_RESULT bool ReadDouble(double* value);
304 V8_WARN_UNUSED_RESULT bool ReadRawBytes(size_t length, const void** data);
305
307 void operator=(const ValueDeserializer&) = delete;
308
309 private:
310 struct PrivateData;
312};
313
314} // namespace v8
315
316#endif // INCLUDE_V8_VALUE_SERIALIZER_H_
ValueDeserializer(const ValueDeserializer &)=delete
void operator=(const ValueDeserializer &)=delete
virtual void ThrowDataCloneError(Local< String > message)=0
virtual ~Delegate()=default
ValueSerializer(const ValueSerializer &)=delete
void operator=(const ValueSerializer &)=delete
STL namespace.
v8_inspector::String16 String
Definition string-util.h:26
#define V8_EXPORT
Definition v8config.h:800
#define V8_WARN_UNUSED_RESULT
Definition v8config.h:671