mirror of
https://github.com/servo/servo
synced 2026-05-12 01:46:28 +02:00
Replace the previously hardcoded "name prefix" strings for actors with [`type_name`](https://doc.rust-lang.org/std/any/fn.type_name.html). Note that we aren't using the prefix directly as an unique identifier, and `type_name` wouldn't be suitable for that. The suffix is an incremental counter shared across all actors, so that alone is enough to differentiate them. The purpose of the prefix is to visually inspect the logs and see what actors are involved. With this change the prefix will be slightly different: "InspectorActor11" vs "inspector11", but that shouldn't affect behaviour. The eventual goal is to remove `new_name` and force the use of `register/register_later` to create an actor. This is however a bit more complicated, see #41768. While I'd love to add `base_name` directly to the `Actor` trait, that would unfortunately mean that it wouldn't be [dyn compatible](https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility). There are workarounds for this like separating the trait in two and implementing it automatically, but I feel that would be too convoluted. Testing: Manual testing, this patch shouldn't change behaviour. Part of: #41768 Signed-off-by: eri <eri@igalia.com>
82 lines
2.0 KiB
Rust
82 lines
2.0 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* 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 serde::Serialize;
|
|
|
|
use crate::actor::{Actor, ActorEncode, ActorRegistry};
|
|
|
|
#[derive(Serialize)]
|
|
pub struct ObjectPreview {
|
|
kind: String,
|
|
url: String,
|
|
}
|
|
|
|
#[derive(Serialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct ObjectActorMsg {
|
|
actor: String,
|
|
#[serde(rename = "type")]
|
|
type_: String,
|
|
class: String,
|
|
own_property_length: i32,
|
|
extensible: bool,
|
|
frozen: bool,
|
|
sealed: bool,
|
|
is_error: bool,
|
|
preview: ObjectPreview,
|
|
}
|
|
|
|
pub struct ObjectActor {
|
|
pub name: String,
|
|
pub _uuid: String,
|
|
}
|
|
|
|
impl Actor for ObjectActor {
|
|
fn name(&self) -> String {
|
|
self.name.clone()
|
|
}
|
|
|
|
// TODO: Handle messages
|
|
// https://searchfox.org/firefox-main/source/devtools/shared/specs/object.js
|
|
}
|
|
|
|
impl ObjectActor {
|
|
pub fn register(registry: &ActorRegistry, uuid: String) -> String {
|
|
if !registry.script_actor_registered(uuid.clone()) {
|
|
let name = registry.new_name::<Self>();
|
|
let actor = ObjectActor {
|
|
name: name.clone(),
|
|
_uuid: uuid.clone(),
|
|
};
|
|
|
|
registry.register_script_actor(uuid, name.clone());
|
|
registry.register_later(actor);
|
|
|
|
name
|
|
} else {
|
|
registry.script_to_actor(uuid)
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ActorEncode<ObjectActorMsg> for ObjectActor {
|
|
fn encode(&self, _: &ActorRegistry) -> ObjectActorMsg {
|
|
// TODO: Review hardcoded values here
|
|
ObjectActorMsg {
|
|
actor: self.name(),
|
|
type_: "object".into(),
|
|
class: "Window".into(),
|
|
own_property_length: 0,
|
|
extensible: true,
|
|
frozen: false,
|
|
sealed: false,
|
|
is_error: false,
|
|
preview: ObjectPreview {
|
|
kind: "ObjectWithURL".into(),
|
|
url: "".into(),
|
|
},
|
|
}
|
|
}
|
|
}
|