Struct script::dom::servoparser::ServoParser
source · #[repr(C)]pub struct ServoParser {Show 14 fields
reflector: Reflector,
document: Dom<Document>,
bom_sniff: DomRefCell<Option<Vec<u8>>>,
network_decoder: DomRefCell<Option<NetworkDecoder>>,
network_input: DomRefCell<BufferQueue>,
script_input: DomRefCell<BufferQueue>,
tokenizer: DomRefCell<Tokenizer>,
last_chunk_received: Cell<bool>,
suspended: Cell<bool>,
script_nesting_level: Cell<usize>,
aborted: Cell<bool>,
script_created_parser: bool,
prefetch_tokenizer: DomRefCell<Tokenizer>,
prefetch_input: DomRefCell<BufferQueue>,
}
Expand description
The parser maintains two input streams: one for input from script through document.write(), and one for input from network.
There is no concrete representation of the insertion point, instead it always points to just before the next character from the network input, with all of the script input before itself.
... script input ... | ... network input ...
^
insertion point
Fields§
§reflector: Reflector
§document: Dom<Document>
The document associated with this parser.
bom_sniff: DomRefCell<Option<Vec<u8>>>
The BOM sniffing state.
None
means we’ve found the BOM, we’ve found there isn’t one, or
we’re not parsing from a byte stream. Some
contains the BOM bytes
found so far.
network_decoder: DomRefCell<Option<NetworkDecoder>>
The decoder used for the network input.
network_input: DomRefCell<BufferQueue>
Input received from network.
script_input: DomRefCell<BufferQueue>
Input received from script. Used only to support document.write().
tokenizer: DomRefCell<Tokenizer>
The tokenizer of this parser.
last_chunk_received: Cell<bool>
Whether to expect any further input from the associated network request.
suspended: Cell<bool>
Whether this parser should avoid passing any further data to the tokenizer.
script_nesting_level: Cell<usize>
§aborted: Cell<bool>
§script_created_parser: bool
§prefetch_tokenizer: DomRefCell<Tokenizer>
We do a quick-and-dirty parse of the input looking for resources to prefetch.
prefetch_input: DomRefCell<BufferQueue>
Implementations§
source§impl ServoParser
impl ServoParser
fn __assert_parent_type(&self)
source§impl ServoParser
impl ServoParser
pub fn parser_is_not_active(&self) -> bool
pub fn parse_html_document(
document: &Document,
input: Option<DOMString>,
url: ServoUrl
)
pub fn parse_html_fragment(
context: &Element,
input: DOMString
) -> impl Iterator<Item = Root<Dom<Node>>>
pub fn parse_html_script_input(document: &Document, url: ServoUrl)
pub fn parse_xml_document(
document: &Document,
input: Option<DOMString>,
url: ServoUrl
)
pub fn script_nesting_level(&self) -> usize
pub fn is_script_created(&self) -> bool
sourcepub fn resume_with_pending_parsing_blocking_script(
&self,
script: &HTMLScriptElement,
result: Result<ScriptOrigin, NetworkError>
)
pub fn resume_with_pending_parsing_blocking_script(
&self,
script: &HTMLScriptElement,
result: Result<ScriptOrigin, NetworkError>
)
Corresponds to the latter part of the “Otherwise” branch of the ‘An end tag whose tag name is “script”’ of https://html.spec.whatwg.org/multipage/#parsing-main-incdata
This first moves everything from the script input to the beginning of the network input, effectively resetting the insertion point to just before the next character to be consumed.
| ... script input ... network input ...
^
insertion point
pub fn can_write(&self) -> bool
sourcepub fn write(&self, text: Vec<DOMString>)
pub fn write(&self, text: Vec<DOMString>)
Steps 6-8 of https://html.spec.whatwg.org/multipage/#document.write()
pub fn close(&self)
pub fn abort(&self)
pub fn is_active(&self) -> bool
fn new_inherited(
document: &Document,
tokenizer: Tokenizer,
last_chunk_state: LastChunkState,
kind: ParserKind
) -> Self
fn new(
document: &Document,
tokenizer: Tokenizer,
last_chunk_state: LastChunkState,
kind: ParserKind
) -> Root<Dom<Self>>
fn push_tendril_input_chunk(&self, chunk: StrTendril)
fn push_bytes_input_chunk(&self, chunk: Vec<u8>)
fn push_string_input_chunk(&self, chunk: String)
fn parse_sync(&self)
fn do_parse_sync(&self)
fn parse_string_chunk(&self, input: String)
fn parse_bytes_chunk(&self, input: Vec<u8>)
fn tokenize<F>(&self, feed: F)where
F: FnMut(&mut Tokenizer) -> Result<(), Root<Dom<HTMLScriptElement>>>,
fn finish(&self)
Trait Implementations§
source§impl DomObject for ServoParser
impl DomObject for ServoParser
source§impl DomObjectWrap for ServoParser
impl DomObjectWrap for ServoParser
source§const WRAP: unsafe fn(_: SafeJSContext, _: &GlobalScope, _: Option<HandleObject<'_>>, _: Box<Self>) -> Root<Dom<Self>> = {dom::bindings::codegen::Bindings::ServoParserBinding::ServoParserBinding::Wrap as for<'a, 'b> unsafe fn(script_runtime::JSContext, &'a dom::globalscope::GlobalScope, std::option::Option<js::rust::Handle<'b, *mut js::jsapi::JSObject>>, std::boxed::Box<dom::servoparser::ServoParser>) -> dom::bindings::root::Root<dom::bindings::root::Dom<dom::servoparser::ServoParser>>}
const WRAP: unsafe fn(_: SafeJSContext, _: &GlobalScope, _: Option<HandleObject<'_>>, _: Box<Self>) -> Root<Dom<Self>> = {dom::bindings::codegen::Bindings::ServoParserBinding::ServoParserBinding::Wrap as for<'a, 'b> unsafe fn(script_runtime::JSContext, &'a dom::globalscope::GlobalScope, std::option::Option<js::rust::Handle<'b, *mut js::jsapi::JSObject>>, std::boxed::Box<dom::servoparser::ServoParser>) -> dom::bindings::root::Root<dom::bindings::root::Dom<dom::servoparser::ServoParser>>}
source§impl HasParent for ServoParser
impl HasParent for ServoParser
source§impl IDLInterface for ServoParser
impl IDLInterface for ServoParser
source§impl JSTraceable for ServoParser
impl JSTraceable for ServoParser
source§impl MallocSizeOf for ServoParser
impl MallocSizeOf for ServoParser
source§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
source§impl MutDomObject for ServoParser
impl MutDomObject for ServoParser
source§unsafe fn init_reflector(&self, obj: *mut JSObject)
unsafe fn init_reflector(&self, obj: *mut JSObject)
source§impl PartialEq<ServoParser> for ServoParser
impl PartialEq<ServoParser> for ServoParser
source§fn eq(&self, other: &ServoParser) -> bool
fn eq(&self, other: &ServoParser) -> bool
self
and other
values to be equal, and is used
by ==
.