/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
components/devtools/actors/inspector/css_properties.rs
69 строк
2 KB
eri
devtools: Avoid panics when borrowing in `ActorRegistry` (#45248)
04 июн 2026, 13:57
Не верифицирован
04 июн 2026, 13:57
84fa008
Код
Авторство
О чём код?
/* 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/. */ //! This actor holds a database of available css properties, their supported values and //! alternative names use std::collections::HashMap; use std::sync::Arc; use devtools_traits::CssDatabaseProperty; use malloc_size_of_derive::MallocSizeOf; use serde::Serialize; use serde_json::{Map, Value}; use crate::StreamId; use crate::actor::{Actor, ActorError, ActorRegistry, new_actor_name}; use crate::protocol::ClientRequest; #[derive(MallocSizeOf)] pub(crate) struct CssPropertiesActor { name: String, properties: HashMap<String, CssDatabaseProperty>, } #[derive(Serialize)] struct GetCssDatabaseReply<'a> { from: String, properties: &'a HashMap<String, CssDatabaseProperty>, } impl Actor for CssPropertiesActor { fn name(&self) -> &str { &self.name } /// The css properties actor can handle the following messages: /// /// - `getCSSDatabase`: Returns a big list of every supported css property so that the /// inspector can show the available options fn handle_message( &self, request: ClientRequest, _registry: &ActorRegistry, msg_type: &str, _msg: &Map<String, Value>, _id: StreamId, ) -> Result<(), ActorError> { match msg_type { "getCSSDatabase" => request.reply_final(&GetCssDatabaseReply { from: self.name().into(), properties: &self.properties, })?, _ => return Err(ActorError::UnrecognizedPacketType), }; Ok(()) } } impl CssPropertiesActor { pub fn register( registry: &ActorRegistry, properties: HashMap<String, CssDatabaseProperty>, ) -> Arc<Self> { let name = new_actor_name::<Self>(); let actor = Self { name, properties }; registry.register::<Self>(actor) } }