/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
components/script/layout_dom/mod.rs
50 строк
2 KB
Martin Robinson
layout_api: Use a "type bundle" to encapsulate all layout DOM types (#44454)
25 апр 2026, 12:21
Не верифицирован
25 апр 2026, 12:21
1a9808d
Код
Авторство
О чём код?
/* 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/. */ //! A safe wrapper for DOM nodes that prevents layout from mutating the DOM, from letting DOM nodes //! escape, and from generally doing anything that it isn't supposed to. This is accomplished via //! a simple whitelist of allowed operations, along with some lifetime magic to prevent nodes from //! escaping. //! //! As a security wrapper is only as good as its whitelist, be careful when adding operations to //! this list. The cardinal rules are: //! //! 1. Layout is not allowed to mutate the DOM. //! //! 2. Layout is not allowed to see anything with `LayoutDom` in the name, because it could hang //! onto these objects and cause use-after-free. //! //! When implementing wrapper functions, be careful that you do not touch the borrow flags, or you //! will race and cause spurious thread failure. (Note that I do not believe these races are //! exploitable, but they'll result in brokenness nonetheless.) mod iterators; mod servo_dangerous_style_document; mod servo_dangerous_style_element; mod servo_dangerous_style_node; mod servo_dangerous_style_shadow_root; mod servo_layout_element; mod servo_layout_node; use std::marker::PhantomData; pub use iterators::*; use layout_api::LayoutDomTypeBundle; pub use servo_dangerous_style_document::*; pub use servo_dangerous_style_element::*; pub use servo_dangerous_style_node::*; pub use servo_dangerous_style_shadow_root::*; pub use servo_layout_element::*; pub use servo_layout_node::*; pub struct ServoLayoutDomTypeBundle<'dom> { phantom: PhantomData<&'dom ()>, } impl<'dom> LayoutDomTypeBundle<'dom> for ServoLayoutDomTypeBundle<'dom> { type ConcreteLayoutElement = ServoLayoutElement<'dom>; type ConcreteLayoutNode = ServoLayoutNode<'dom>; type ConcreteDangerousStyleNode = ServoDangerousStyleNode<'dom>; type ConcreteDangerousStyleElement = ServoDangerousStyleElement<'dom>; }