diff options
-rw-r--r-- | Cargo.lock | 53 | ||||
-rw-r--r-- | Cargo.toml | 6 | ||||
-rw-r--r-- | components/script/Cargo.toml | 1 | ||||
-rw-r--r-- | components/script/dom/servoparser/async_html.rs | 10 | ||||
-rw-r--r-- | components/script/dom/servoparser/html.rs | 3 | ||||
-rw-r--r-- | components/script/dom/servoparser/mod.rs | 13 | ||||
-rw-r--r-- | components/script/dom/servoparser/prefetch.rs | 3 | ||||
-rw-r--r-- | components/script/dom/servoparser/xml.rs | 18 |
8 files changed, 53 insertions, 54 deletions
diff --git a/Cargo.lock b/Cargo.lock index ee3c5dbad23..461ba94e96f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1065,7 +1065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -2049,7 +2049,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -2575,7 +2575,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -3280,9 +3280,9 @@ dependencies = [ [[package]] name = "html5ever" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bf3413d61499f71fe4f627bbecfbec2977ce280525701df788f47370b0c507" +checksum = "953cbbe631aae7fc0a112702ad5d3aaf09da38beaf45ea84610d6e1c358f569c" dependencies = [ "log", "mac", @@ -4037,7 +4037,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi 0.5.0", "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4331,7 +4331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -4530,9 +4530,9 @@ dependencies = [ [[package]] name = "markup5ever" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a7b81dfb91586d0677086d40a6d755070e0799b71bb897485bac408dfd5c69" +checksum = "0ba2225413ed418d540a2c8247d794f4b0527a021da36f69c05344d716dc44c1" dependencies = [ "log", "phf", @@ -6210,7 +6210,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -6344,6 +6344,7 @@ dependencies = [ "libc", "log", "malloc_size_of_derive", + "markup5ever", "media", "metrics", "mime", @@ -6537,7 +6538,7 @@ dependencies = [ [[package]] name = "selectors" version = "0.27.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "bitflags 2.9.0", "cssparser", @@ -6822,7 +6823,7 @@ dependencies = [ [[package]] name = "servo_arc" version = "0.4.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "serde", "stable_deref_trait", @@ -7274,7 +7275,7 @@ dependencies = [ [[package]] name = "stylo" version = "0.2.1" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "app_units", "arrayvec", @@ -7332,7 +7333,7 @@ dependencies = [ [[package]] name = "stylo_atoms" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "string_cache", "string_cache_codegen", @@ -7341,12 +7342,12 @@ dependencies = [ [[package]] name = "stylo_config" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" [[package]] name = "stylo_derive" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "darling", "proc-macro2", @@ -7358,7 +7359,7 @@ dependencies = [ [[package]] name = "stylo_dom" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "bitflags 2.9.0", "stylo_malloc_size_of", @@ -7367,7 +7368,7 @@ dependencies = [ [[package]] name = "stylo_malloc_size_of" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "app_units", "cssparser", @@ -7384,12 +7385,12 @@ dependencies = [ [[package]] name = "stylo_static_prefs" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" [[package]] name = "stylo_traits" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "app_units", "bitflags 2.9.0", @@ -7553,7 +7554,7 @@ dependencies = [ "getrandom", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -7772,7 +7773,7 @@ dependencies = [ [[package]] name = "to_shmem" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "cssparser", "servo_arc", @@ -7785,7 +7786,7 @@ dependencies = [ [[package]] name = "to_shmem_derive" version = "0.1.0" -source = "git+https://github.com/servo/stylo?branch=2025-03-15#53bd9b280e15d8b55636b93001083d914ee2cb6b" +source = "git+https://github.com/servo/stylo?branch=2025-03-15#c756a21864709dae8f85c564125bf92440aeaab5" dependencies = [ "darling", "proc-macro2", @@ -8853,7 +8854,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -9430,9 +9431,9 @@ checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" [[package]] name = "xml5ever" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9f61eba2105dcadbee9232cfcf75c96abea184bf3805a8bfe022cf7fe7fa11d" +checksum = "0a91563ba5a5ab749488164063f1317e327ca1daa80f00e5bd1e670ad0d78154" dependencies = [ "log", "mac", diff --git a/Cargo.toml b/Cargo.toml index 9ed4ad4dda2..e4c13d3678e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,7 +71,7 @@ gstreamer-video = "0.23" harfbuzz-sys = "0.6.1" headers = "0.4" hitrace = "0.1.4" -html5ever = "0.30" +html5ever = "0.31" http = "1.3" http-body-util = "0.1" hyper = "1.6" @@ -92,7 +92,7 @@ log = "0.4" mach2 = "0.4" malloc_size_of = { package = "servo_malloc_size_of", path = "components/malloc_size_of" } malloc_size_of_derive = "0.1" -markup5ever = "0.15" +markup5ever = "0.16" memmap2 = "0.9.5" mime = "0.3.13" mime_guess = "2.0.5" @@ -174,7 +174,7 @@ windows-sys = "0.59" wio = "0.2" wr_malloc_size_of = { git = "https://github.com/servo/webrender", branch = "0.66" } xi-unicode = "0.3.0" -xml5ever = "0.21" +xml5ever = "0.22" [profile.release] opt-level = 3 diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 691afd3935e..37e80d0e748 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -84,6 +84,7 @@ libc = { workspace = true } log = { workspace = true } malloc_size_of = { workspace = true } malloc_size_of_derive = { workspace = true } +markup5ever = { workspace = true } media = { path = "../media" } metrics = { path = "../metrics" } mime = { workspace = true } diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs index 3b3df28d4a9..7ddc425678e 100644 --- a/components/script/dom/servoparser/async_html.rs +++ b/components/script/dom/servoparser/async_html.rs @@ -14,14 +14,14 @@ use crossbeam_channel::{Receiver, Sender, unbounded}; use html5ever::buffer_queue::BufferQueue; use html5ever::tendril::fmt::UTF8; use html5ever::tendril::{SendTendril, StrTendril, Tendril}; -use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts, TokenizerResult}; +use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts}; use html5ever::tree_builder::{ - ElementFlags, NextParserState, NodeOrText as HtmlNodeOrText, QuirksMode, TreeBuilder, - TreeBuilderOpts, TreeSink, + ElementFlags, NodeOrText as HtmlNodeOrText, QuirksMode, TreeBuilder, TreeBuilderOpts, TreeSink, }; use html5ever::{ Attribute as HtmlAttribute, ExpandedName, QualName, local_name, namespace_url, ns, }; +use markup5ever::TokenizerResult; use servo_url::ServoUrl; use style::context::QuirksMode as ServoQuirksMode; @@ -901,10 +901,6 @@ impl TreeSink for Sink { self.send_op(ParseOperation::MarkScriptAlreadyStarted { node: node.id }); } - fn complete_script(&self, _: &Self::Handle) -> NextParserState { - panic!("complete_script should not be called here!"); - } - fn reparent_children(&self, parent: &Self::Handle, new_parent: &Self::Handle) { self.send_op(ParseOperation::ReparentChildren { parent: parent.id, diff --git a/components/script/dom/servoparser/html.rs b/components/script/dom/servoparser/html.rs index 14d75a355d4..3bd486b5cb7 100644 --- a/components/script/dom/servoparser/html.rs +++ b/components/script/dom/servoparser/html.rs @@ -10,9 +10,10 @@ use std::io; use html5ever::buffer_queue::BufferQueue; use html5ever::serialize::TraversalScope::IncludeNode; use html5ever::serialize::{AttrRef, Serialize, Serializer, TraversalScope}; -use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts, TokenizerResult}; +use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts}; use html5ever::tree_builder::{TreeBuilder, TreeBuilderOpts}; use html5ever::{QualName, local_name, namespace_url, ns}; +use markup5ever::TokenizerResult; use script_bindings::trace::CustomTraceable; use servo_url::ServoUrl; use xml5ever::LocalName; diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs index eb1e8d687bd..2652e44e02c 100644 --- a/components/script/dom/servoparser/mod.rs +++ b/components/script/dom/servoparser/mod.rs @@ -16,10 +16,10 @@ use encoding_rs::Encoding; use html5ever::buffer_queue::BufferQueue; use html5ever::tendril::fmt::UTF8; use html5ever::tendril::{ByteTendril, StrTendril, TendrilSink}; -use html5ever::tokenizer::TokenizerResult; -use html5ever::tree_builder::{ElementFlags, NextParserState, NodeOrText, QuirksMode, TreeSink}; +use html5ever::tree_builder::{ElementFlags, NodeOrText, QuirksMode, TreeSink}; use html5ever::{Attribute, ExpandedName, LocalName, QualName, local_name, namespace_url, ns}; use hyper_serde::Serde; +use markup5ever::TokenizerResult; use mime::{self, Mime}; use net_traits::request::RequestId; use net_traits::{ @@ -1356,15 +1356,6 @@ impl TreeSink for Sink { } } - fn complete_script(&self, node: &Dom<Node>) -> NextParserState { - if let Some(script) = node.downcast() { - self.script.set(Some(script)); - NextParserState::Suspend - } else { - NextParserState::Continue - } - } - fn reparent_children(&self, node: &Dom<Node>, new_parent: &Dom<Node>) { while let Some(ref child) = node.GetFirstChild() { new_parent.AppendChild(child, CanGc::note()).unwrap(); diff --git a/components/script/dom/servoparser/prefetch.rs b/components/script/dom/servoparser/prefetch.rs index 250b92f8c8b..8191363bf20 100644 --- a/components/script/dom/servoparser/prefetch.rs +++ b/components/script/dom/servoparser/prefetch.rs @@ -10,10 +10,11 @@ use content_security_policy::Destination; use html5ever::buffer_queue::BufferQueue; use html5ever::tokenizer::states::RawKind; use html5ever::tokenizer::{ - Tag, TagKind, Token, TokenSink, TokenSinkResult, Tokenizer as HtmlTokenizer, TokenizerResult, + Tag, TagKind, Token, TokenSink, TokenSinkResult, Tokenizer as HtmlTokenizer, }; use html5ever::{Attribute, LocalName, local_name}; use js::jsapi::JSTracer; +use markup5ever::TokenizerResult; use net_traits::request::{ CorsSettings, CredentialsMode, InsecureRequestsPolicy, ParserMetadata, Referrer, }; diff --git a/components/script/dom/servoparser/xml.rs b/components/script/dom/servoparser/xml.rs index 218fdfaece5..f132cbcb3fd 100644 --- a/components/script/dom/servoparser/xml.rs +++ b/components/script/dom/servoparser/xml.rs @@ -6,13 +6,14 @@ use std::cell::Cell; -use html5ever::tokenizer::TokenizerResult; +use markup5ever::TokenizerResult; use script_bindings::trace::CustomTraceable; use servo_url::ServoUrl; use xml5ever::buffer_queue::BufferQueue; use xml5ever::tokenizer::XmlTokenizer; use xml5ever::tree_builder::XmlTreeBuilder; +use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::document::Document; use crate::dom::htmlscriptelement::HTMLScriptElement; @@ -43,10 +44,17 @@ impl Tokenizer { } pub(crate) fn feed(&self, input: &BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> { - self.inner.run(input); - match self.inner.sink.sink.script.take() { - Some(script) => TokenizerResult::Script(script), - None => TokenizerResult::Done, + loop { + match self.inner.run(input) { + TokenizerResult::Done => return TokenizerResult::Done, + TokenizerResult::Script(handle) => { + // Apparently the parser can sometimes create <script> elements without a namespace, resulting + // in them not being HTMLScriptElements. + if let Some(script) = handle.downcast::<HTMLScriptElement>() { + return TokenizerResult::Script(DomRoot::from_ref(script)); + } + }, + } } } |