From 6c518c89b969d1e9a96c3c5b9fe0da6cfc3637d1 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 2 May 2017 11:10:49 +0200 Subject: Upgrade to html5ever 0.16 --- components/script/dom/servoparser/xml.rs | 133 ++----------------------------- 1 file changed, 7 insertions(+), 126 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 1ef5f882db0..da5e1987253 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -4,29 +4,17 @@ #![allow(unrooted_must_root)] -use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::inheritance::Castable; -use dom::bindings::js::{JS, MutNullableJS, Root}; -use dom::bindings::str::DOMString; +use dom::bindings::js::{JS, Root}; use dom::bindings::trace::JSTraceable; -use dom::comment::Comment; use dom::document::Document; -use dom::documenttype::DocumentType; -use dom::element::{Element, ElementCreator}; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::Node; -use dom::processinginstruction::ProcessingInstruction; -use dom::virtualmethods::vtable_for; -use html5ever::tokenizer::buffer_queue::BufferQueue; -use html5ever::tree_builder::{NodeOrText as H5eNodeOrText}; -use html5ever_atoms::{Prefix, QualName}; +use dom::servoparser::Sink; use js::jsapi::JSTracer; use servo_url::ServoUrl; -use std::borrow::Cow; -use xml5ever::tendril::StrTendril; -use xml5ever::tokenizer::{Attribute, QName, XmlTokenizer}; -use xml5ever::tree_builder::{NextParserState, NodeOrText}; -use xml5ever::tree_builder::{Tracer as XmlTracer, TreeSink, XmlTreeBuilder}; +use xml5ever::buffer_queue::BufferQueue; +use xml5ever::tokenizer::XmlTokenizer; +use xml5ever::tree_builder::{Tracer as XmlTracer, XmlTreeBuilder}; #[derive(HeapSizeOf, JSTraceable)] #[must_root] @@ -40,6 +28,7 @@ impl Tokenizer { let sink = Sink { base_url: url, document: JS::from_ref(document), + current_line: 1, script: Default::default(), }; @@ -86,7 +75,7 @@ unsafe impl JSTraceable for XmlTokenizer, Sink>> { impl XmlTracer for Tracer { type Handle = JS; #[allow(unrooted_must_root)] - fn trace_handle(&self, node: JS) { + fn trace_handle(&self, node: &JS) { unsafe { node.trace(self.0); } } } @@ -96,111 +85,3 @@ unsafe impl JSTraceable for XmlTokenizer, Sink>> { tree_builder.sink().trace(trc); } } - -#[derive(JSTraceable, HeapSizeOf)] -#[must_root] -struct Sink { - base_url: ServoUrl, - document: JS, - script: MutNullableJS, -} - -impl TreeSink for Sink { - type Output = Self; - type Handle = JS; - - fn finish(self) -> Self { - self - } - - fn parse_error(&mut self, msg: Cow<'static, str>) { - debug!("Parse error: {}", msg); - } - - fn get_document(&mut self) -> JS { - JS::from_ref(self.document.upcast()) - } - - fn elem_name(&self, target: &JS) -> QName { - let elem = target.downcast::() - .expect("tried to get name of non-Element in XML parsing"); - QName { - prefix: elem.prefix().map_or(namespace_prefix!(""), |p| Prefix::from(&**p)), - namespace_url: elem.namespace().clone(), - local: elem.local_name().clone(), - } - } - - fn create_element(&mut self, name: QName, attrs: Vec) - -> JS { - let prefix = if name.prefix == namespace_prefix!("") { None } else { Some(name.prefix) }; - let name = QualName { - ns: name.namespace_url, - local: name.local, - }; - //TODO: Add ability to track lines to API of xml5ever - let elem = Element::create(name, prefix, &*self.document, - ElementCreator::ParserCreated(1)); - - for attr in attrs { - let name = QualName { - ns: attr.name.namespace_url, - local: attr.name.local, - }; - elem.set_attribute_from_parser(name, DOMString::from(String::from(attr.value)), None); - } - - JS::from_ref(elem.upcast()) - } - - fn create_comment(&mut self, text: StrTendril) -> JS { - let comment = Comment::new(DOMString::from(String::from(text)), &*self.document); - JS::from_ref(comment.upcast()) - } - - fn append(&mut self, parent: JS, child: NodeOrText>) { - let child = match child { - NodeOrText::AppendNode(n) => H5eNodeOrText::AppendNode(n), - NodeOrText::AppendText(s) => H5eNodeOrText::AppendText(s), - }; - super::insert(&*parent, None, child); - } - - fn append_doctype_to_document(&mut self, name: StrTendril, public_id: StrTendril, - system_id: StrTendril) { - let doc = &*self.document; - let doctype = DocumentType::new( - DOMString::from(String::from(name)), Some(DOMString::from(String::from(public_id))), - Some(DOMString::from(String::from(system_id))), doc); - doc.upcast::().AppendChild(doctype.upcast()).expect("Appending failed"); - } - - fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> JS { - let doc = &*self.document; - let pi = ProcessingInstruction::new( - DOMString::from(String::from(target)), DOMString::from(String::from(data)), - doc); - JS::from_ref(pi.upcast()) - } - - fn mark_script_already_started(&mut self, node: Self::Handle) { - let script = node.downcast::(); - if let Some(script) = script { - script.set_already_started(true); - } - } - - fn complete_script(&mut self, node: Self::Handle) -> NextParserState { - if let Some(script) = node.downcast() { - self.script.set(Some(script)); - NextParserState::Suspend - } else { - NextParserState::Continue - } - } - - fn pop(&mut self, node: Self::Handle) { - let node = Root::from_ref(&*node); - vtable_for(&node).pop(); - } -} -- cgit v1.2.3 From 4e4b5ab5c80d85bdbd1de3c291f7135af51bde87 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Sun, 21 May 2017 22:40:58 +0200 Subject: Decode UTF-8 code points across network packets --- components/script/dom/servoparser/xml.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index da5e1987253..508a6692919 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -44,13 +44,13 @@ impl Tokenizer { if !input.is_empty() { while let Some(chunk) = input.pop_front() { self.inner.feed(chunk); - if let Some(script) = self.inner.sink().sink().script.take() { + if let Some(script) = self.inner.sink.sink.script.take() { return Err(script); } } } else { self.inner.run(); - if let Some(script) = self.inner.sink().sink().script.take() { + if let Some(script) = self.inner.sink.sink.script.take() { return Err(script); } } @@ -62,7 +62,7 @@ impl Tokenizer { } pub fn url(&self) -> &ServoUrl { - &self.inner.sink().sink().base_url + &self.inner.sink.sink.base_url } } @@ -80,8 +80,8 @@ unsafe impl JSTraceable for XmlTokenizer, Sink>> { } } - let tree_builder = self.sink(); + let tree_builder = &self.sink; tree_builder.trace_handles(&tracer); - tree_builder.sink().trace(trc); + tree_builder.sink.trace(trc); } } -- cgit v1.2.3 From 0e3c54c1911ba2c3bf305ee04f04fcd9bf2fc2fe Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:30:24 +0200 Subject: Rename dom::bindings::js to dom::bindings::root --- components/script/dom/servoparser/xml.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 508a6692919..58791b4d323 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -4,7 +4,7 @@ #![allow(unrooted_must_root)] -use dom::bindings::js::{JS, Root}; +use dom::bindings::root::{JS, Root}; use dom::bindings::trace::JSTraceable; use dom::document::Document; use dom::htmlscriptelement::HTMLScriptElement; -- cgit v1.2.3 From 7be32fb2371a14ba61b008a37e79761f66c073c7 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 25 Sep 2017 23:56:32 +0200 Subject: Rename JS to Dom --- components/script/dom/servoparser/xml.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 58791b4d323..12c9131daa5 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -4,7 +4,7 @@ #![allow(unrooted_must_root)] -use dom::bindings::root::{JS, Root}; +use dom::bindings::root::{Dom, Root}; use dom::bindings::trace::JSTraceable; use dom::document::Document; use dom::htmlscriptelement::HTMLScriptElement; @@ -20,14 +20,14 @@ use xml5ever::tree_builder::{Tracer as XmlTracer, XmlTreeBuilder}; #[must_root] pub struct Tokenizer { #[ignore_heap_size_of = "Defined in xml5ever"] - inner: XmlTokenizer, Sink>>, + inner: XmlTokenizer, Sink>>, } impl Tokenizer { pub fn new(document: &Document, url: ServoUrl) -> Self { let sink = Sink { base_url: url, - document: JS::from_ref(document), + document: Dom::from_ref(document), current_line: 1, script: Default::default(), }; @@ -67,15 +67,15 @@ impl Tokenizer { } #[allow(unsafe_code)] -unsafe impl JSTraceable for XmlTokenizer, Sink>> { +unsafe impl JSTraceable for XmlTokenizer, Sink>> { unsafe fn trace(&self, trc: *mut JSTracer) { struct Tracer(*mut JSTracer); let tracer = Tracer(trc); impl XmlTracer for Tracer { - type Handle = JS; + type Handle = Dom; #[allow(unrooted_must_root)] - fn trace_handle(&self, node: &JS) { + fn trace_handle(&self, node: &Dom) { unsafe { node.trace(self.0); } } } -- cgit v1.2.3 From f87c2a8d7616112ca924e30292db2d244cf87eec Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 26 Sep 2017 01:53:40 +0200 Subject: Rename Root to DomRoot In a later PR, DomRoot will become a type alias of Root>, where Root will be able to handle all the things that need to be rooted that have a stable traceable address that doesn't move for the whole lifetime of the root. Stay tuned. --- components/script/dom/servoparser/xml.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 12c9131daa5..fe74d627349 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -4,7 +4,7 @@ #![allow(unrooted_must_root)] -use dom::bindings::root::{Dom, Root}; +use dom::bindings::root::{Dom, DomRoot}; use dom::bindings::trace::JSTraceable; use dom::document::Document; use dom::htmlscriptelement::HTMLScriptElement; @@ -40,7 +40,7 @@ impl Tokenizer { } } - pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), Root> { + pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot> { if !input.is_empty() { while let Some(chunk) = input.pop_front() { self.inner.feed(chunk); -- cgit v1.2.3 From 4506f0d30cbbb02df32e9c16135ef288ad6b7e2e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Wed, 18 Oct 2017 10:42:01 +1100 Subject: Replace all uses of the `heapsize` crate with `malloc_size_of`. Servo currently uses `heapsize`, but Stylo/Gecko use `malloc_size_of`. `malloc_size_of` is better -- it handles various cases that `heapsize` does not -- so this patch changes Servo to use `malloc_size_of`. This patch makes the following changes to the `malloc_size_of` crate. - Adds `MallocSizeOf` trait implementations for numerous types, some built-in (e.g. `VecDeque`), some external and Servo-only (e.g. `string_cache`). - Makes `enclosing_size_of_op` optional, because vanilla jemalloc doesn't support that operation. - For `HashSet`/`HashMap`, falls back to a computed estimate when `enclosing_size_of_op` isn't available. - Adds an extern "C" `malloc_size_of` function that does the actual heap measurement; this is based on the same functions from the `heapsize` crate. This patch makes the following changes elsewhere. - Converts all the uses of `heapsize` to instead use `malloc_size_of`. - Disables the "heapsize"/"heap_size" feature for the external crates that provide it. - Removes the `HeapSizeOf` implementation from `hashglobe`. - Adds `ignore` annotations to a few `Rc`/`Arc`, because `malloc_size_of` doesn't derive those types, unlike `heapsize`. --- components/script/dom/servoparser/xml.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index fe74d627349..d34792b56c3 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -16,10 +16,10 @@ use xml5ever::buffer_queue::BufferQueue; use xml5ever::tokenizer::XmlTokenizer; use xml5ever::tree_builder::{Tracer as XmlTracer, XmlTreeBuilder}; -#[derive(HeapSizeOf, JSTraceable)] +#[derive(JSTraceable, MallocSizeOf)] #[must_root] pub struct Tokenizer { - #[ignore_heap_size_of = "Defined in xml5ever"] + #[ignore_malloc_size_of = "Defined in xml5ever"] inner: XmlTokenizer, Sink>>, } -- cgit v1.2.3 From 87475b11d344c2bfdfbed4d48495ecedec34bac8 Mon Sep 17 00:00:00 2001 From: Connor Brewster Date: Mon, 27 Nov 2017 13:55:46 -0600 Subject: Implement the create an element for token algorithm --- components/script/dom/servoparser/xml.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index d34792b56c3..62ebe351a23 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -9,7 +9,7 @@ use dom::bindings::trace::JSTraceable; use dom::document::Document; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::Node; -use dom::servoparser::Sink; +use dom::servoparser::{ParsingAlgorithm, Sink}; use js::jsapi::JSTracer; use servo_url::ServoUrl; use xml5ever::buffer_queue::BufferQueue; @@ -30,6 +30,7 @@ impl Tokenizer { document: Dom::from_ref(document), current_line: 1, script: Default::default(), + parsing_algorithm: ParsingAlgorithm::Normal, }; let tb = XmlTreeBuilder::new(sink, Default::default()); -- cgit v1.2.3 From c37a345dc9f4dda6ea29c42f96f6c7201c42cbac Mon Sep 17 00:00:00 2001 From: chansuke Date: Tue, 18 Sep 2018 23:24:15 +0900 Subject: Format script component --- components/script/dom/servoparser/xml.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 62ebe351a23..defac0eab44 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -36,9 +36,7 @@ impl Tokenizer { let tb = XmlTreeBuilder::new(sink, Default::default()); let tok = XmlTokenizer::new(tb, Default::default()); - Tokenizer { - inner: tok, - } + Tokenizer { inner: tok } } pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot> { @@ -77,7 +75,9 @@ unsafe impl JSTraceable for XmlTokenizer, Sink>> { type Handle = Dom; #[allow(unrooted_must_root)] fn trace_handle(&self, node: &Dom) { - unsafe { node.trace(self.0); } + unsafe { + node.trace(self.0); + } } } -- cgit v1.2.3 From 45f7199eee82c66637ec68287eafa40a651001c4 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 1 Nov 2018 23:45:06 +0100 Subject: `cargo fix --edition` --- components/script/dom/servoparser/xml.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index defac0eab44..6f1a1ba099d 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -4,12 +4,12 @@ #![allow(unrooted_must_root)] -use dom::bindings::root::{Dom, DomRoot}; -use dom::bindings::trace::JSTraceable; -use dom::document::Document; -use dom::htmlscriptelement::HTMLScriptElement; -use dom::node::Node; -use dom::servoparser::{ParsingAlgorithm, Sink}; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::trace::JSTraceable; +use crate::dom::document::Document; +use crate::dom::htmlscriptelement::HTMLScriptElement; +use crate::dom::node::Node; +use crate::dom::servoparser::{ParsingAlgorithm, Sink}; use js::jsapi::JSTracer; use servo_url::ServoUrl; use xml5ever::buffer_queue::BufferQueue; -- cgit v1.2.3 From a1a14459c141afc6ac6771b8a6c9ca374537edf2 Mon Sep 17 00:00:00 2001 From: Jan Andre Ikenmeyer Date: Mon, 19 Nov 2018 14:47:12 +0100 Subject: Update MPL license to https (part 3) --- components/script/dom/servoparser/xml.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 6f1a1ba099d..2d9c8ac51ec 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -1,6 +1,6 @@ /* 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 http://mozilla.org/MPL/2.0/. */ + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #![allow(unrooted_must_root)] -- cgit v1.2.3 From 00ac887862b4612c4d0c071523450f20c1484b6b Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Sun, 19 May 2019 21:29:26 +0200 Subject: Update xml5ever and html5ever --- components/script/dom/servoparser/xml.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 2d9c8ac51ec..8f30e54174d 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -40,18 +40,9 @@ impl Tokenizer { } pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), DomRoot> { - if !input.is_empty() { - while let Some(chunk) = input.pop_front() { - self.inner.feed(chunk); - if let Some(script) = self.inner.sink.sink.script.take() { - return Err(script); - } - } - } else { - self.inner.run(); - if let Some(script) = self.inner.sink.sink.script.take() { - return Err(script); - } + self.inner.run(input); + if let Some(script) = self.inner.sink.sink.script.take() { + return Err(script); } Ok(()) } -- cgit v1.2.3 From bea73951db5a758f78842a0056daccba9d89a9c0 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 12 Nov 2019 22:16:08 +0100 Subject: Use `#![register_tool]` instead of `#![register_attr]` CC https://github.com/rust-lang/rust/issues/66079 --- components/script/dom/servoparser/xml.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components/script/dom/servoparser/xml.rs') diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 8f30e54174d..ac900d61ce0 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -17,7 +17,7 @@ use xml5ever::tokenizer::XmlTokenizer; use xml5ever::tree_builder::{Tracer as XmlTracer, XmlTreeBuilder}; #[derive(JSTraceable, MallocSizeOf)] -#[must_root] +#[unrooted_must_root_lint::must_root] pub struct Tokenizer { #[ignore_malloc_size_of = "Defined in xml5ever"] inner: XmlTokenizer, Sink>>, -- cgit v1.2.3