mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
parent
b80769dbf5
commit
2980903bfb
1 changed files with 34 additions and 13 deletions
|
@ -12,6 +12,7 @@ use dom::bindings::codegen::Bindings::HTMLLinkElementBinding::HTMLLinkElementMet
|
|||
use dom::bindings::inheritance::Castable;
|
||||
use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference};
|
||||
use dom::bindings::refcounted::Trusted;
|
||||
use dom::bindings::reflector::Reflectable;
|
||||
use dom::bindings::str::DOMString;
|
||||
use dom::document::Document;
|
||||
use dom::domtokenlist::DOMTokenList;
|
||||
|
@ -28,7 +29,8 @@ use hyper_serde::Serde;
|
|||
use ipc_channel::ipc;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use msg::constellation_msg::ReferrerPolicy;
|
||||
use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError};
|
||||
use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError};
|
||||
use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType};
|
||||
use network_listener::{NetworkListener, PreInvoke};
|
||||
use script_layout_interface::message::Msg;
|
||||
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
|
||||
|
@ -243,11 +245,8 @@ impl HTMLLinkElement {
|
|||
script_chan: document.window().networking_task_source(),
|
||||
wrapper: Some(document.window().get_runnable_wrapper()),
|
||||
};
|
||||
let response_target = AsyncResponseTarget {
|
||||
sender: action_sender,
|
||||
};
|
||||
ROUTER.add_route(action_receiver.to_opaque(), box move |message| {
|
||||
listener.notify_action(message.to().unwrap());
|
||||
listener.notify_fetch(message.to().unwrap());
|
||||
});
|
||||
|
||||
if self.parser_inserted.get() {
|
||||
|
@ -256,10 +255,23 @@ impl HTMLLinkElement {
|
|||
|
||||
let referrer_policy = match self.RelList().Contains("noreferrer".into()) {
|
||||
true => Some(ReferrerPolicy::NoReferrer),
|
||||
false => None,
|
||||
false => document.get_referrer_policy(),
|
||||
};
|
||||
|
||||
document.load_async(LoadType::Stylesheet(url), response_target, referrer_policy);
|
||||
let request = RequestInit {
|
||||
url: url.clone(),
|
||||
type_: RequestType::Style,
|
||||
destination: Destination::Style,
|
||||
credentials_mode: CredentialsMode::Include,
|
||||
use_url_credentials: true,
|
||||
origin: document.url().clone(),
|
||||
pipeline_id: Some(self.global().r().pipeline_id()),
|
||||
referrer_url: Some(document.url().clone()),
|
||||
referrer_policy: referrer_policy,
|
||||
.. RequestInit::default()
|
||||
};
|
||||
|
||||
document.fetch_async(LoadType::Stylesheet(url), request, action_sender);
|
||||
}
|
||||
|
||||
fn handle_favicon_url(&self, rel: &str, href: &str, sizes: &Option<String>) {
|
||||
|
@ -295,9 +307,19 @@ struct StylesheetContext {
|
|||
|
||||
impl PreInvoke for StylesheetContext {}
|
||||
|
||||
impl AsyncResponseListener for StylesheetContext {
|
||||
fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>) {
|
||||
self.metadata = metadata.ok();
|
||||
impl FetchResponseListener for StylesheetContext {
|
||||
fn process_request_body(&mut self) {}
|
||||
|
||||
fn process_request_eof(&mut self) {}
|
||||
|
||||
fn process_response(&mut self,
|
||||
metadata: Result<FetchMetadata, NetworkError>) {
|
||||
self.metadata = metadata.ok().map(|m| {
|
||||
match m {
|
||||
FetchMetadata::Unfiltered(m) => m,
|
||||
FetchMetadata::Filtered { unsafe_, .. } => unsafe_
|
||||
}
|
||||
});
|
||||
if let Some(ref meta) = self.metadata {
|
||||
if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type {
|
||||
} else {
|
||||
|
@ -306,12 +328,11 @@ impl AsyncResponseListener for StylesheetContext {
|
|||
}
|
||||
}
|
||||
|
||||
fn data_available(&mut self, payload: Vec<u8>) {
|
||||
let mut payload = payload;
|
||||
fn process_response_chunk(&mut self, mut payload: Vec<u8>) {
|
||||
self.data.append(&mut payload);
|
||||
}
|
||||
|
||||
fn response_complete(&mut self, status: Result<(), NetworkError>) {
|
||||
fn process_response_eof(&mut self, status: Result<(), NetworkError>) {
|
||||
let elem = self.elem.root();
|
||||
let document = document_from_node(&*elem);
|
||||
let mut successful = false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue