/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
components/script/dom/xmlserializer.rs
73 строки
2 KB
Tim van der Lippe
script: Mechanically migrate to `reflect_dom_object_with_proto` (#46529)
15 июл 2026, 23:09
Не верифицирован
15 июл 2026, 23:09
2557009
Код
Авторство
О чём код?
/* 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 dom_struct::dom_struct; use js::context::JSContext; use js::rust::HandleObject; use script_bindings::reflector::{Reflector, reflect_dom_object_with_proto}; use xml5ever::serialize::{SerializeOpts, TraversalScope, serialize}; use crate::dom::bindings::codegen::Bindings::XMLSerializerBinding::XMLSerializerMethods; use crate::dom::bindings::error::{Error, Fallible}; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::str::DOMString; use crate::dom::node::Node; use crate::dom::servoparser::html::HtmlSerialize; use crate::dom::window::Window; #[dom_struct] pub(crate) struct XMLSerializer { reflector_: Reflector, window: Dom<Window>, } impl XMLSerializer { fn new_inherited(window: &Window) -> XMLSerializer { XMLSerializer { reflector_: Reflector::new(), window: Dom::from_ref(window), } } pub(crate) fn new( cx: &mut JSContext, window: &Window, proto: Option<HandleObject>, ) -> DomRoot<XMLSerializer> { reflect_dom_object_with_proto( cx, Box::new(XMLSerializer::new_inherited(window)), window, proto, ) } } impl XMLSerializerMethods<crate::DomTypeHolder> for XMLSerializer { /// <https://w3c.github.io/DOM-Parsing/#dom-xmlserializer> fn Constructor( cx: &mut JSContext, window: &Window, proto: Option<HandleObject>, ) -> Fallible<DomRoot<XMLSerializer>> { Ok(XMLSerializer::new(cx, window, proto)) } /// <https://w3c.github.io/DOM-Parsing/#the-xmlserializer-interface> fn SerializeToString(&self, root: &Node) -> Fallible<DOMString> { let mut writer = vec![]; match serialize( &mut writer, &HtmlSerialize::new(root), SerializeOpts { traversal_scope: TraversalScope::IncludeNode, }, ) { Ok(_) => Ok(DOMString::from(String::from_utf8(writer).unwrap())), Err(_) => Err(Error::Type( c"root must be a Node or an Attr object".to_owned(), )), } } }