14#include "src/inspector/protocol/Runtime.h"
21using protocol::Response;
22std::unique_ptr<protocol::Value> DescriptionForDate(
28 return protocol::StringValue::create(
33 String16Builder resultStringBuilder;
43 resultStringBuilder.append(
'v');
46 return resultStringBuilder.toString();
51 V8SerializationDuplicateTracker& duplicateTracker,
52 protocol::DictionaryValue&
result) {
54 protocol::Runtime::DeepSerializedValue::TypeEnum::Regexp);
56 std::unique_ptr<protocol::DictionaryValue> resultValue =
57 protocol::DictionaryValue::create();
61 context->GetIsolate(), value->GetSource())));
63 String16 flags = DescriptionForRegExpFlags(value);
64 if (!flags.isEmpty()) {
66 protocol::StringValue::create(flags));
69 result.setValue(
"value", std::move(resultValue));
70 return Response::Success();
75 V8SerializationDuplicateTracker& duplicateTracker,
76 protocol::DictionaryValue&
result) {
78 protocol::Runtime::DeepSerializedValue::TypeEnum::Date);
79 std::unique_ptr<protocol::Value> dateDescription =
80 DescriptionForDate(context, value.As<
v8::Date>());
82 result.setValue(
"value", std::move(dateDescription));
83 return Response::Success();
89 V8SerializationDuplicateTracker& duplicateTracker,
90 std::unique_ptr<protocol::ListValue>*
result) {
91 std::unique_ptr<protocol::ListValue> serializedValue =
92 protocol::ListValue::create();
93 uint32_t length = value->Length();
94 serializedValue->reserve(length);
97 bool success = value->Get(context,
i).ToLocal(&elementValue);
101 std::unique_ptr<protocol::DictionaryValue> elementProtocolValue;
103 ->buildDeepSerializedValue(
104 context, maxDepth - 1, additionalParameters,
105 duplicateTracker, &elementProtocolValue);
106 if (!response.IsSuccess())
return response;
107 serializedValue->pushValue(std::move(elementProtocolValue));
109 *
result = std::move(serializedValue);
110 return Response::Success();
116 V8SerializationDuplicateTracker& duplicateTracker,
117 protocol::DictionaryValue&
result) {
119 protocol::Runtime::DeepSerializedValue::TypeEnum::Array);
122 std::unique_ptr<protocol::ListValue> serializedValue;
124 SerializeArrayValue(value, context, maxDepth, additionalParameters,
125 duplicateTracker, &serializedValue);
126 if (!response.IsSuccess())
return response;
128 result.setValue(
"value", std::move(serializedValue));
131 return Response::Success();
136 V8SerializationDuplicateTracker& duplicateTracker,
137 protocol::DictionaryValue&
result) {
139 protocol::Runtime::DeepSerializedValue::TypeEnum::Map);
142 std::unique_ptr<protocol::ListValue> serializedValue =
143 protocol::ListValue::create();
147 uint32_t length = propertiesAndValues->Length();
148 serializedValue->reserve(length);
149 for (uint32_t
i = 0;
i <
length;
i += 2) {
151 std::unique_ptr<protocol::Value> keyProtocolValue;
152 std::unique_ptr<protocol::DictionaryValue> propertyProtocolValue;
154 bool success = propertiesAndValues->Get(context,
i).ToLocal(&keyV8Value);
157 propertiesAndValues->Get(context,
i + 1).ToLocal(&propertyV8Value);
161 if (keyV8Value->IsString()) {
165 std::unique_ptr<protocol::DictionaryValue> keyDictionaryProtocolValue;
168 ->buildDeepSerializedValue(
169 context, maxDepth - 1, additionalParameters,
170 duplicateTracker, &keyDictionaryProtocolValue);
171 if (!response.IsSuccess())
return response;
172 keyProtocolValue = std::move(keyDictionaryProtocolValue);
176 ->buildDeepSerializedValue(
177 context, maxDepth - 1, additionalParameters,
178 duplicateTracker, &propertyProtocolValue);
179 if (!response.IsSuccess())
return response;
181 std::unique_ptr<protocol::ListValue> keyValueList =
182 protocol::ListValue::create();
184 keyValueList->pushValue(std::move(keyProtocolValue));
185 keyValueList->pushValue(std::move(propertyProtocolValue));
187 serializedValue->pushValue(std::move(keyValueList));
189 result.setValue(
"value", std::move(serializedValue));
192 return Response::Success();
197 V8SerializationDuplicateTracker& duplicateTracker,
198 protocol::DictionaryValue&
result) {
200 protocol::Runtime::DeepSerializedValue::TypeEnum::Set);
203 std::unique_ptr<protocol::ListValue> serializedValue;
204 Response response = SerializeArrayValue(value->AsArray(), context, maxDepth,
205 additionalParameters,
207 duplicateTracker, &serializedValue);
208 result.setValue(
"value", std::move(serializedValue));
210 return Response::Success();
216 V8SerializationDuplicateTracker& duplicateTracker,
217 std::unique_ptr<protocol::ListValue>*
result) {
218 std::unique_ptr<protocol::ListValue> serializedValue =
219 protocol::ListValue::create();
224 ->GetOwnPropertyNames(context,
229 .ToLocal(&propertyNames);
232 uint32_t length = propertyNames->Length();
233 serializedValue->reserve(length);
236 std::unique_ptr<protocol::Value> keyProtocolValue;
237 std::unique_ptr<protocol::DictionaryValue> propertyProtocolValue;
239 success = propertyNames->Get(context,
i).ToLocal(&keyV8Value);
241 CHECK(keyV8Value->IsString());
244 value->HasRealNamedProperty(context, keyV8Value.
As<
v8::String>());
249 keyProtocolValue = protocol::StringValue::create(
252 success = value->Get(context, keyV8Value).ToLocal(&propertyV8Value);
257 ->buildDeepSerializedValue(
258 context, maxDepth - 1, additionalParameters,
259 duplicateTracker, &propertyProtocolValue);
260 if (!response.IsSuccess())
return response;
262 std::unique_ptr<protocol::ListValue> keyValueList =
263 protocol::ListValue::create();
265 keyValueList->pushValue(std::move(keyProtocolValue));
266 keyValueList->pushValue(std::move(propertyProtocolValue));
268 serializedValue->pushValue(std::move(keyValueList));
270 *
result = std::move(serializedValue);
271 return Response::Success();
277 V8SerializationDuplicateTracker& duplicateTracker,
278 protocol::DictionaryValue&
result) {
280 protocol::Runtime::DeepSerializedValue::TypeEnum::Object);
283 std::unique_ptr<protocol::ListValue> serializedValue;
284 Response response = SerializeObjectValue(
285 value.As<
v8::Object>(), context, maxDepth, additionalParameters,
286 duplicateTracker, &serializedValue);
287 if (!response.IsSuccess())
return response;
288 result.setValue(
"value", std::move(serializedValue));
290 return Response::Success();
298 protocol::DictionaryValue&
result) {
299 if (value->IsArray()) {
300 return SerializeArray(value.As<
v8::Array>(), context, maxDepth,
301 additionalParameters, duplicateTracker,
result);
303 if (value->IsRegExp()) {
304 return SerializeRegexp(value.As<
v8::RegExp>(), context, duplicateTracker,
307 if (value->IsDate()) {
308 return SerializeDate(value.As<
v8::Date>(), context, duplicateTracker,
311 if (value->IsMap()) {
312 return SerializeMap(value.As<
v8::Map>(), context, maxDepth,
313 additionalParameters, duplicateTracker,
result);
315 if (value->IsSet()) {
316 return SerializeSet(value.As<
v8::Set>(), context, maxDepth,
317 additionalParameters, duplicateTracker,
result);
319 if (value->IsWeakMap()) {
321 protocol::Runtime::DeepSerializedValue::TypeEnum::Weakmap);
322 return Response::Success();
324 if (value->IsWeakSet()) {
326 protocol::Runtime::DeepSerializedValue::TypeEnum::Weakset);
327 return Response::Success();
329 if (value->IsNativeError()) {
331 protocol::Runtime::DeepSerializedValue::TypeEnum::Error);
332 return Response::Success();
334 if (value->IsProxy()) {
336 protocol::Runtime::DeepSerializedValue::TypeEnum::Proxy);
337 return Response::Success();
339 if (value->IsPromise()) {
341 protocol::Runtime::DeepSerializedValue::TypeEnum::Promise);
342 return Response::Success();
344 if (value->IsTypedArray()) {
346 "type", protocol::Runtime::DeepSerializedValue::TypeEnum::Typedarray);
347 return Response::Success();
349 if (value->IsArrayBuffer()) {
351 "type", protocol::Runtime::DeepSerializedValue::TypeEnum::Arraybuffer);
352 return Response::Success();
354 if (value->IsFunction()) {
356 "type", protocol::Runtime::DeepSerializedValue::TypeEnum::Function);
357 return Response::Success();
359 if (value->IsGeneratorObject()) {
361 "type", protocol::Runtime::DeepSerializedValue::TypeEnum::Generator);
362 return Response::Success();
366 return SerializeObject(value.As<
v8::Object>(), context, maxDepth,
367 additionalParameters, duplicateTracker,
result);
V8_INLINE Local< S > As() const
V8_INLINE T FromJust() const &
V8_INLINE bool IsNothing() const
static protocol::Response serializeV8Value(v8::Local< v8::Object > value, v8::Local< v8::Context > context, int maxDepth, v8::Local< v8::Object > additionalParameters, V8SerializationDuplicateTracker &duplicateTracker, protocol::DictionaryValue &result)
static std::unique_ptr< ValueMirror > create(v8::Local< v8::Context > context, v8::Local< v8::Value > value)
ZoneVector< RpoNumber > & result
v8_inspector::String16 String
String16 toProtocolString(v8::Isolate *isolate, v8::Local< v8::String > value)