mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
devtools: Move debugger_value_to_json to lib.rs (#44160)
Testing: Existing tests pass Part of: #36027 Signed-off-by: eri <eri@igalia.com> Co-authored-by: atbrakhi <atbrakhi@igalia.com>
This commit is contained in:
@@ -99,10 +99,9 @@ function createValueGrip(value, depth = 0) {
|
||||
return { valueType: "-Infinity" };
|
||||
} else if (Number.isNaN(value)) {
|
||||
return { valueType: "NaN" };
|
||||
} else if (!value && 1 / value === -Infinity) {
|
||||
} else if (Object.is(value, -0)) {
|
||||
return { valueType: "-0" };
|
||||
}
|
||||
|
||||
return { valueType: "number", numberValue: value };
|
||||
case "string":
|
||||
return { valueType: "string", stringValue: value };
|
||||
|
||||
@@ -23,11 +23,10 @@ use uuid::Uuid;
|
||||
|
||||
use crate::actor::{Actor, ActorError, ActorRegistry};
|
||||
use crate::actors::browsing_context::BrowsingContextActor;
|
||||
use crate::actors::object::debugger_value_to_json;
|
||||
use crate::actors::worker::WorkerTargetActor;
|
||||
use crate::protocol::{ClientRequest, DevtoolsConnection, JsonPacketStream};
|
||||
use crate::resource::{ResourceArrayType, ResourceAvailable};
|
||||
use crate::{EmptyReplyMsg, StreamId, UniqueId};
|
||||
use crate::{EmptyReplyMsg, StreamId, UniqueId, debugger_value_to_json};
|
||||
|
||||
#[derive(Clone, Serialize, MallocSizeOf)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use devtools_traits::{DebuggerValue, ObjectPreview, PropertyDescriptor};
|
||||
use devtools_traits::{ObjectPreview, PropertyDescriptor};
|
||||
use malloc_size_of_derive::MallocSizeOf;
|
||||
use serde::Serialize;
|
||||
use serde_json::{Map, Number, Value};
|
||||
use serde_json::{Map, Value};
|
||||
|
||||
use crate::StreamId;
|
||||
use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry};
|
||||
use crate::actors::property_iterator::PropertyIteratorActor;
|
||||
use crate::protocol::ClientRequest;
|
||||
use crate::{StreamId, debugger_value_to_json};
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
@@ -77,52 +77,6 @@ impl ObjectPropertyDescriptor {
|
||||
}
|
||||
}
|
||||
|
||||
/// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/utils.js#148>
|
||||
pub(crate) fn debugger_value_to_json(registry: &ActorRegistry, value: DebuggerValue) -> Value {
|
||||
let mut v = Map::new();
|
||||
match value {
|
||||
DebuggerValue::VoidValue => {
|
||||
v.insert("type".to_owned(), Value::String("undefined".to_owned()));
|
||||
Value::Object(v)
|
||||
},
|
||||
DebuggerValue::NullValue => {
|
||||
v.insert("type".to_owned(), Value::String("null".to_owned()));
|
||||
Value::Object(v)
|
||||
},
|
||||
DebuggerValue::BooleanValue(boolean) => Value::Bool(boolean),
|
||||
DebuggerValue::NumberValue(val) => {
|
||||
if val.is_nan() {
|
||||
v.insert("type".to_owned(), Value::String("NaN".to_owned()));
|
||||
Value::Object(v)
|
||||
} else if val.is_infinite() {
|
||||
if val < 0. {
|
||||
v.insert("type".to_owned(), Value::String("-Infinity".to_owned()));
|
||||
} else {
|
||||
v.insert("type".to_owned(), Value::String("Infinity".to_owned()));
|
||||
}
|
||||
Value::Object(v)
|
||||
} else if val == 0. && val.is_sign_negative() {
|
||||
v.insert("type".to_owned(), Value::String("-0".to_owned()));
|
||||
Value::Object(v)
|
||||
} else {
|
||||
Value::Number(Number::from_f64(val).unwrap())
|
||||
}
|
||||
},
|
||||
DebuggerValue::StringValue(str) => Value::String(str),
|
||||
DebuggerValue::ObjectValue {
|
||||
uuid,
|
||||
class,
|
||||
preview,
|
||||
..
|
||||
} => {
|
||||
let object_name = ObjectActor::register(registry, Some(uuid), class, preview);
|
||||
let object_msg = registry.encode::<ObjectActor, _>(&object_name);
|
||||
let value = serde_json::to_value(object_msg).unwrap_or_default();
|
||||
Value::Object(value.as_object().cloned().unwrap_or_default())
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(MallocSizeOf)]
|
||||
pub(crate) struct ObjectActor {
|
||||
name: String,
|
||||
|
||||
@@ -35,6 +35,7 @@ use rand::{RngCore, rng};
|
||||
use resource::{ResourceArrayType, ResourceAvailable};
|
||||
use rustc_hash::FxHashMap;
|
||||
use serde::Serialize;
|
||||
use serde_json::{Map, Number, Value};
|
||||
use servo_base::generic_channel::{self, GenericSender};
|
||||
use servo_base::id::{BrowsingContextId, PipelineId, WebViewId};
|
||||
use servo_config::pref;
|
||||
@@ -48,6 +49,7 @@ use crate::actors::framerate::FramerateActor;
|
||||
use crate::actors::inspector::InspectorActor;
|
||||
use crate::actors::inspector::walker::WalkerActor;
|
||||
use crate::actors::network_event::NetworkEventActor;
|
||||
use crate::actors::object::ObjectActor;
|
||||
use crate::actors::pause::PauseActor;
|
||||
use crate::actors::root::RootActor;
|
||||
use crate::actors::source::SourceActor;
|
||||
@@ -948,3 +950,49 @@ fn handle_client(
|
||||
|
||||
registry.cleanup(stream_id);
|
||||
}
|
||||
|
||||
/// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/utils.js#148>
|
||||
pub(crate) fn debugger_value_to_json(registry: &ActorRegistry, value: DebuggerValue) -> Value {
|
||||
let mut v = Map::new();
|
||||
match value {
|
||||
DebuggerValue::VoidValue => {
|
||||
v.insert("type".to_owned(), Value::String("undefined".to_owned()));
|
||||
Value::Object(v)
|
||||
},
|
||||
DebuggerValue::NullValue => {
|
||||
v.insert("type".to_owned(), Value::String("null".to_owned()));
|
||||
Value::Object(v)
|
||||
},
|
||||
DebuggerValue::BooleanValue(boolean) => Value::Bool(boolean),
|
||||
DebuggerValue::NumberValue(val) => {
|
||||
if val.is_nan() {
|
||||
v.insert("type".to_owned(), Value::String("NaN".to_owned()));
|
||||
Value::Object(v)
|
||||
} else if val.is_infinite() {
|
||||
if val < 0. {
|
||||
v.insert("type".to_owned(), Value::String("-Infinity".to_owned()));
|
||||
} else {
|
||||
v.insert("type".to_owned(), Value::String("Infinity".to_owned()));
|
||||
}
|
||||
Value::Object(v)
|
||||
} else if val == 0. && val.is_sign_negative() {
|
||||
v.insert("type".to_owned(), Value::String("-0".to_owned()));
|
||||
Value::Object(v)
|
||||
} else {
|
||||
Value::Number(Number::from_f64(val).unwrap())
|
||||
}
|
||||
},
|
||||
DebuggerValue::StringValue(str) => Value::String(str),
|
||||
DebuggerValue::ObjectValue {
|
||||
uuid,
|
||||
class,
|
||||
preview,
|
||||
..
|
||||
} => {
|
||||
let object_name = ObjectActor::register(registry, Some(uuid), class, preview);
|
||||
let object_msg = registry.encode::<ObjectActor, _>(&object_name);
|
||||
let value = serde_json::to_value(object_msg).unwrap_or_default();
|
||||
Value::Object(value.as_object().cloned().unwrap_or_default())
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user