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: BufferQueue,
script_input: BufferQueue,
tokenizer: Tokenizer,
last_chunk_received: Cell<bool>,
suspended: Cell<bool>,
script_nesting_level: Cell<usize>,
aborted: Cell<bool>,
script_created_parser: bool,
prefetch_tokenizer: Tokenizer,
prefetch_input: 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: BufferQueue
Input received from network.
script_input: BufferQueue
Input received from script. Used only to support document.write().
tokenizer: 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: Tokenizer
We do a quick-and-dirty parse of the input looking for resources to prefetch.
prefetch_input: 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, can_gc: CanGc, )
pub fn parse_html_fragment( context: &Element, input: DOMString, can_gc: CanGc, ) -> 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, can_gc: CanGc, )
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, NoTrace<NetworkError>>,
can_gc: CanGc,
)
pub fn resume_with_pending_parsing_blocking_script( &self, script: &HTMLScriptElement, result: Result<ScriptOrigin, NoTrace<NetworkError>>, can_gc: CanGc, )
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
pub fn close(&self, can_gc: CanGc)
pub fn abort(&self, can_gc: CanGc)
pub fn is_active(&self) -> bool
fn new_inherited( document: &Document, tokenizer: Tokenizer, kind: ParserKind, ) -> Self
fn new( document: &Document, tokenizer: Tokenizer, 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, can_gc: CanGc)
fn do_parse_sync(&self, can_gc: CanGc)
fn parse_complete_string_chunk(&self, input: String, can_gc: CanGc)
fn parse_bytes_chunk(&self, input: Vec<u8>, can_gc: CanGc)
fn tokenize<F>(&self, feed: F, can_gc: CanGc)
fn finish(&self, can_gc: CanGc)
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>, _: CanGc) -> Root<Dom<Self>> = {dom::bindings::codegen::Bindings::ServoParserBinding::ServoParser_Binding::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>, script_runtime::CanGc) -> dom::bindings::root::Root<dom::bindings::root::Dom<dom::servoparser::ServoParser>>}
const WRAP: unsafe fn(_: SafeJSContext, _: &GlobalScope, _: Option<HandleObject<'_>>, _: Box<Self>, _: CanGc) -> Root<Dom<Self>> = {dom::bindings::codegen::Bindings::ServoParserBinding::ServoParser_Binding::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>, script_runtime::CanGc) -> 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 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§impl PartialEq for ServoParser
impl PartialEq for ServoParser
source§impl ToJSValConvertible for ServoParser
impl ToJSValConvertible for ServoParser
source§impl Traceable for ServoParser
impl Traceable for ServoParser
impl Eq for ServoParser
Auto Trait Implementations§
impl !Freeze for ServoParser
impl !RefUnwindSafe for ServoParser
impl !Send for ServoParser
impl !Sync for ServoParser
impl Unpin for ServoParser
impl !UnwindSafe for ServoParser
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more