mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Unify the way html5ever and xml5ever block on script elements (#36284)
Companion PR for https://github.com/servo/html5ever/pull/591 Testing: Covered by WPT Part of https://github.com/servo/servo/issues/6414, https://github.com/servo/servo/issues/24898, preparation for https://github.com/servo/html5ever/pull/590 --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
parent
ce4ca9ee98
commit
9af9507920
8 changed files with 53 additions and 54 deletions
53
Cargo.lock
generated
53
Cargo.lock
generated
|
@ -1065,7 +1065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2049,7 +2049,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
|
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2575,7 +2575,7 @@ dependencies = [
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps",
|
"system-deps",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3280,9 +3280,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "html5ever"
|
name = "html5ever"
|
||||||
version = "0.30.0"
|
version = "0.31.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d5bf3413d61499f71fe4f627bbecfbec2977ce280525701df788f47370b0c507"
|
checksum = "953cbbe631aae7fc0a112702ad5d3aaf09da38beaf45ea84610d6e1c358f569c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"mac",
|
"mac",
|
||||||
|
@ -4037,7 +4037,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi 0.5.0",
|
"hermit-abi 0.5.0",
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4331,7 +4331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
|
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"windows-targets 0.52.6",
|
"windows-targets 0.48.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4530,9 +4530,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "markup5ever"
|
name = "markup5ever"
|
||||||
version = "0.15.0"
|
version = "0.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "03a7b81dfb91586d0677086d40a6d755070e0799b71bb897485bac408dfd5c69"
|
checksum = "0ba2225413ed418d540a2c8247d794f4b0527a021da36f69c05344d716dc44c1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"phf",
|
"phf",
|
||||||
|
@ -6210,7 +6210,7 @@ dependencies = [
|
||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -6344,6 +6344,7 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"malloc_size_of_derive",
|
"malloc_size_of_derive",
|
||||||
|
"markup5ever",
|
||||||
"media",
|
"media",
|
||||||
"metrics",
|
"metrics",
|
||||||
"mime",
|
"mime",
|
||||||
|
@ -6537,7 +6538,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "selectors"
|
name = "selectors"
|
||||||
version = "0.27.0"
|
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 = [
|
dependencies = [
|
||||||
"bitflags 2.9.0",
|
"bitflags 2.9.0",
|
||||||
"cssparser",
|
"cssparser",
|
||||||
|
@ -6822,7 +6823,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo_arc"
|
name = "servo_arc"
|
||||||
version = "0.4.0"
|
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 = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"stable_deref_trait",
|
"stable_deref_trait",
|
||||||
|
@ -7274,7 +7275,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo"
|
name = "stylo"
|
||||||
version = "0.2.1"
|
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 = [
|
dependencies = [
|
||||||
"app_units",
|
"app_units",
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
|
@ -7332,7 +7333,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo_atoms"
|
name = "stylo_atoms"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"string_cache",
|
"string_cache",
|
||||||
"string_cache_codegen",
|
"string_cache_codegen",
|
||||||
|
@ -7341,12 +7342,12 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo_config"
|
name = "stylo_config"
|
||||||
version = "0.2.0"
|
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]]
|
[[package]]
|
||||||
name = "stylo_derive"
|
name = "stylo_derive"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -7358,7 +7359,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo_dom"
|
name = "stylo_dom"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"bitflags 2.9.0",
|
"bitflags 2.9.0",
|
||||||
"stylo_malloc_size_of",
|
"stylo_malloc_size_of",
|
||||||
|
@ -7367,7 +7368,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo_malloc_size_of"
|
name = "stylo_malloc_size_of"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"app_units",
|
"app_units",
|
||||||
"cssparser",
|
"cssparser",
|
||||||
|
@ -7384,12 +7385,12 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stylo_static_prefs"
|
name = "stylo_static_prefs"
|
||||||
version = "0.2.0"
|
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]]
|
[[package]]
|
||||||
name = "stylo_traits"
|
name = "stylo_traits"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"app_units",
|
"app_units",
|
||||||
"bitflags 2.9.0",
|
"bitflags 2.9.0",
|
||||||
|
@ -7553,7 +7554,7 @@ dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -7772,7 +7773,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "to_shmem"
|
name = "to_shmem"
|
||||||
version = "0.2.0"
|
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 = [
|
dependencies = [
|
||||||
"cssparser",
|
"cssparser",
|
||||||
"servo_arc",
|
"servo_arc",
|
||||||
|
@ -7785,7 +7786,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "to_shmem_derive"
|
name = "to_shmem_derive"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -8853,7 +8854,7 @@ version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -9430,9 +9431,9 @@ checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xml5ever"
|
name = "xml5ever"
|
||||||
version = "0.21.0"
|
version = "0.22.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c9f61eba2105dcadbee9232cfcf75c96abea184bf3805a8bfe022cf7fe7fa11d"
|
checksum = "0a91563ba5a5ab749488164063f1317e327ca1daa80f00e5bd1e670ad0d78154"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"mac",
|
"mac",
|
||||||
|
|
|
@ -71,7 +71,7 @@ gstreamer-video = "0.23"
|
||||||
harfbuzz-sys = "0.6.1"
|
harfbuzz-sys = "0.6.1"
|
||||||
headers = "0.4"
|
headers = "0.4"
|
||||||
hitrace = "0.1.4"
|
hitrace = "0.1.4"
|
||||||
html5ever = "0.30"
|
html5ever = "0.31"
|
||||||
http = "1.3"
|
http = "1.3"
|
||||||
http-body-util = "0.1"
|
http-body-util = "0.1"
|
||||||
hyper = "1.6"
|
hyper = "1.6"
|
||||||
|
@ -92,7 +92,7 @@ log = "0.4"
|
||||||
mach2 = "0.4"
|
mach2 = "0.4"
|
||||||
malloc_size_of = { package = "servo_malloc_size_of", path = "components/malloc_size_of" }
|
malloc_size_of = { package = "servo_malloc_size_of", path = "components/malloc_size_of" }
|
||||||
malloc_size_of_derive = "0.1"
|
malloc_size_of_derive = "0.1"
|
||||||
markup5ever = "0.15"
|
markup5ever = "0.16"
|
||||||
memmap2 = "0.9.5"
|
memmap2 = "0.9.5"
|
||||||
mime = "0.3.13"
|
mime = "0.3.13"
|
||||||
mime_guess = "2.0.5"
|
mime_guess = "2.0.5"
|
||||||
|
@ -174,7 +174,7 @@ windows-sys = "0.59"
|
||||||
wio = "0.2"
|
wio = "0.2"
|
||||||
wr_malloc_size_of = { git = "https://github.com/servo/webrender", branch = "0.66" }
|
wr_malloc_size_of = { git = "https://github.com/servo/webrender", branch = "0.66" }
|
||||||
xi-unicode = "0.3.0"
|
xi-unicode = "0.3.0"
|
||||||
xml5ever = "0.21"
|
xml5ever = "0.22"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
|
@ -84,6 +84,7 @@ libc = { workspace = true }
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
malloc_size_of = { workspace = true }
|
malloc_size_of = { workspace = true }
|
||||||
malloc_size_of_derive = { workspace = true }
|
malloc_size_of_derive = { workspace = true }
|
||||||
|
markup5ever = { workspace = true }
|
||||||
media = { path = "../media" }
|
media = { path = "../media" }
|
||||||
metrics = { path = "../metrics" }
|
metrics = { path = "../metrics" }
|
||||||
mime = { workspace = true }
|
mime = { workspace = true }
|
||||||
|
|
|
@ -14,14 +14,14 @@ use crossbeam_channel::{Receiver, Sender, unbounded};
|
||||||
use html5ever::buffer_queue::BufferQueue;
|
use html5ever::buffer_queue::BufferQueue;
|
||||||
use html5ever::tendril::fmt::UTF8;
|
use html5ever::tendril::fmt::UTF8;
|
||||||
use html5ever::tendril::{SendTendril, StrTendril, Tendril};
|
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::{
|
use html5ever::tree_builder::{
|
||||||
ElementFlags, NextParserState, NodeOrText as HtmlNodeOrText, QuirksMode, TreeBuilder,
|
ElementFlags, NodeOrText as HtmlNodeOrText, QuirksMode, TreeBuilder, TreeBuilderOpts, TreeSink,
|
||||||
TreeBuilderOpts, TreeSink,
|
|
||||||
};
|
};
|
||||||
use html5ever::{
|
use html5ever::{
|
||||||
Attribute as HtmlAttribute, ExpandedName, QualName, local_name, namespace_url, ns,
|
Attribute as HtmlAttribute, ExpandedName, QualName, local_name, namespace_url, ns,
|
||||||
};
|
};
|
||||||
|
use markup5ever::TokenizerResult;
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use style::context::QuirksMode as ServoQuirksMode;
|
use style::context::QuirksMode as ServoQuirksMode;
|
||||||
|
|
||||||
|
@ -901,10 +901,6 @@ impl TreeSink for Sink {
|
||||||
self.send_op(ParseOperation::MarkScriptAlreadyStarted { node: node.id });
|
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) {
|
fn reparent_children(&self, parent: &Self::Handle, new_parent: &Self::Handle) {
|
||||||
self.send_op(ParseOperation::ReparentChildren {
|
self.send_op(ParseOperation::ReparentChildren {
|
||||||
parent: parent.id,
|
parent: parent.id,
|
||||||
|
|
|
@ -10,9 +10,10 @@ use std::io;
|
||||||
use html5ever::buffer_queue::BufferQueue;
|
use html5ever::buffer_queue::BufferQueue;
|
||||||
use html5ever::serialize::TraversalScope::IncludeNode;
|
use html5ever::serialize::TraversalScope::IncludeNode;
|
||||||
use html5ever::serialize::{AttrRef, Serialize, Serializer, TraversalScope};
|
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::tree_builder::{TreeBuilder, TreeBuilderOpts};
|
||||||
use html5ever::{QualName, local_name, namespace_url, ns};
|
use html5ever::{QualName, local_name, namespace_url, ns};
|
||||||
|
use markup5ever::TokenizerResult;
|
||||||
use script_bindings::trace::CustomTraceable;
|
use script_bindings::trace::CustomTraceable;
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use xml5ever::LocalName;
|
use xml5ever::LocalName;
|
||||||
|
|
|
@ -16,10 +16,10 @@ use encoding_rs::Encoding;
|
||||||
use html5ever::buffer_queue::BufferQueue;
|
use html5ever::buffer_queue::BufferQueue;
|
||||||
use html5ever::tendril::fmt::UTF8;
|
use html5ever::tendril::fmt::UTF8;
|
||||||
use html5ever::tendril::{ByteTendril, StrTendril, TendrilSink};
|
use html5ever::tendril::{ByteTendril, StrTendril, TendrilSink};
|
||||||
use html5ever::tokenizer::TokenizerResult;
|
use html5ever::tree_builder::{ElementFlags, NodeOrText, QuirksMode, TreeSink};
|
||||||
use html5ever::tree_builder::{ElementFlags, NextParserState, NodeOrText, QuirksMode, TreeSink};
|
|
||||||
use html5ever::{Attribute, ExpandedName, LocalName, QualName, local_name, namespace_url, ns};
|
use html5ever::{Attribute, ExpandedName, LocalName, QualName, local_name, namespace_url, ns};
|
||||||
use hyper_serde::Serde;
|
use hyper_serde::Serde;
|
||||||
|
use markup5ever::TokenizerResult;
|
||||||
use mime::{self, Mime};
|
use mime::{self, Mime};
|
||||||
use net_traits::request::RequestId;
|
use net_traits::request::RequestId;
|
||||||
use net_traits::{
|
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>) {
|
fn reparent_children(&self, node: &Dom<Node>, new_parent: &Dom<Node>) {
|
||||||
while let Some(ref child) = node.GetFirstChild() {
|
while let Some(ref child) = node.GetFirstChild() {
|
||||||
new_parent.AppendChild(child, CanGc::note()).unwrap();
|
new_parent.AppendChild(child, CanGc::note()).unwrap();
|
||||||
|
|
|
@ -10,10 +10,11 @@ use content_security_policy::Destination;
|
||||||
use html5ever::buffer_queue::BufferQueue;
|
use html5ever::buffer_queue::BufferQueue;
|
||||||
use html5ever::tokenizer::states::RawKind;
|
use html5ever::tokenizer::states::RawKind;
|
||||||
use html5ever::tokenizer::{
|
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 html5ever::{Attribute, LocalName, local_name};
|
||||||
use js::jsapi::JSTracer;
|
use js::jsapi::JSTracer;
|
||||||
|
use markup5ever::TokenizerResult;
|
||||||
use net_traits::request::{
|
use net_traits::request::{
|
||||||
CorsSettings, CredentialsMode, InsecureRequestsPolicy, ParserMetadata, Referrer,
|
CorsSettings, CredentialsMode, InsecureRequestsPolicy, ParserMetadata, Referrer,
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,13 +6,14 @@
|
||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
use html5ever::tokenizer::TokenizerResult;
|
use markup5ever::TokenizerResult;
|
||||||
use script_bindings::trace::CustomTraceable;
|
use script_bindings::trace::CustomTraceable;
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use xml5ever::buffer_queue::BufferQueue;
|
use xml5ever::buffer_queue::BufferQueue;
|
||||||
use xml5ever::tokenizer::XmlTokenizer;
|
use xml5ever::tokenizer::XmlTokenizer;
|
||||||
use xml5ever::tree_builder::XmlTreeBuilder;
|
use xml5ever::tree_builder::XmlTreeBuilder;
|
||||||
|
|
||||||
|
use crate::dom::bindings::inheritance::Castable;
|
||||||
use crate::dom::bindings::root::{Dom, DomRoot};
|
use crate::dom::bindings::root::{Dom, DomRoot};
|
||||||
use crate::dom::document::Document;
|
use crate::dom::document::Document;
|
||||||
use crate::dom::htmlscriptelement::HTMLScriptElement;
|
use crate::dom::htmlscriptelement::HTMLScriptElement;
|
||||||
|
@ -43,10 +44,17 @@ impl Tokenizer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn feed(&self, input: &BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> {
|
pub(crate) fn feed(&self, input: &BufferQueue) -> TokenizerResult<DomRoot<HTMLScriptElement>> {
|
||||||
self.inner.run(input);
|
loop {
|
||||||
match self.inner.sink.sink.script.take() {
|
match self.inner.run(input) {
|
||||||
Some(script) => TokenizerResult::Script(script),
|
TokenizerResult::Done => return TokenizerResult::Done,
|
||||||
None => 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));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue