pub struct Provider { /* private fields */ }net only.Implementations§
Source§impl Provider
impl Provider
pub fn new(waker: Option<Arc<dyn NetWaker>>) -> Provider
Sourcepub fn with_user_agent(
waker: Option<Arc<dyn NetWaker>>,
user_agent: &str,
) -> Provider
pub fn with_user_agent( waker: Option<Arc<dyn NetWaker>>, user_agent: &str, ) -> Provider
A provider that identifies itself as user_agent.
The string is sent verbatim on document, subresource and script
requests alike, because a server that decides what to serve from the
User-Agent will do so on every one of them, and a client that agreed
with itself on only some would fetch a page assembled for two different
browsers.
Sourcepub fn user_agent(&self) -> &str
pub fn user_agent(&self) -> &str
What this provider identifies itself as.
pub fn is_empty(&self) -> bool
pub fn count(&self) -> usize
Source§impl Provider
impl Provider
pub fn fetch_with_callback( &self, request: Request, callback: Box<dyn FnOnce(Result<(String, Bytes), ProviderError>) + Sync + Send>, )
pub async fn fetch_async( &self, request: Request, ) -> Result<(String, Bytes), ProviderError>
Sourcepub async fn fetch_response_async(
&self,
request: Request,
) -> Result<FetchResponse, ProviderError>
pub async fn fetch_response_async( &self, request: Request, ) -> Result<FetchResponse, ProviderError>
Fetch, keeping the response metadata that Provider::fetch_async
discards.
fetch_async returns (String, Bytes): the final URL and the body. That
is the right shape for the overwhelmingly common case, a document or a
subresource whose bytes are the whole answer, and it stays as it is.
What it cannot answer is what the server said the bytes were. An
embedder loading a WebAssembly module wants to reject
Content-Type: text/html before handing the bytes to a parser that will
report an offset into a file that is not a module at all. That check
needs headers, and the headers already exist: fetch_http reads them off
the response and drops them on the way out.
Additive rather than a widening of fetch_async, deliberately. Changing
that return type touches every caller in every embedder for a need only
some of them have, and HeaderMap is a heap-allocated multimap the hot
path would then build and clone for every subresource. This allocates
only for the callers that ask.
data: and file: URLs synthesise a response. A data: URL states its
own mime type, so that becomes a real Content-Type; a file: URL has
none, and a caller that requires one should read an absent header as
unknown rather than as a mismatch.
impl Provider
The fetch() path.
Separate from Provider::fetch_inner rather than layered on it, and the
reason is the whole point of the trait: fetch_inner returns
(String, Bytes) and turns any non-success status into a ProviderError
that NetProvider::fetch then logs and drops. A caller loading an image
wants exactly that. A fetch() caller wants the 404.
Trait Implementations§
Source§impl FetchProvider for Provider
impl FetchProvider for Provider
fn fetch(&self, request: FetchRequest, handler: Box<dyn FetchHandler>)
Source§impl NetProvider for Provider
impl NetProvider for Provider
fn fetch(&self, doc_id: usize, request: Request, handler: Box<dyn NetHandler>)
Source§fn is_noop(&self) -> bool
fn is_noop(&self) -> bool
DummyNetProvider) that will never
deliver resources. When true, callers must NOT register resources as
“pending critical” — doing so blocks painting forever, since the
completion callback never fires. Used by integrations that feed a
pre-rendered DOM and perform no sub-fetches (e.g. aginxbrowser).Auto Trait Implementations§
impl !RefUnwindSafe for Provider
impl !UnwindSafe for Provider
impl Freeze for Provider
impl Send for Provider
impl Sync for Provider
impl Unpin for Provider
impl UnsafeUnpin for Provider
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> ErasedDestructor for Twhere
T: 'static,
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