mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01: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
|
@ -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));
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue